internal static EnumResponsesGen1.Gen1Roster Gen1Roster1979( LinksDataSet.tblRelatedStructureRow drRelated, LinksDataSet.tblResponseDataTable dt ) { //LinksDataSet.tblSubjectRow drSubject1, LinksDataSet.tblSubjectRow drSubject2 ) { if ( dt == null ) throw new ArgumentNullException("dt"); if ( drRelated == null ) throw new ArgumentNullException("drRelated"); const Int32 expectedSurveyYear = 1979; LinksDataSet.tblSubjectRow drSubject1 = drRelated.tblSubjectRowByFK_tblRelatedStructure_tblSubject_Subject1; LinksDataSet.tblSubjectRow drSubject2 = drRelated.tblSubjectRowByFK_tblRelatedStructure_tblSubject_Subject2; string selectToGetLoopIndex = string.Format("{0}={1} AND {2}={3} AND {4}={5}", drSubject1.SubjectTag, dt.SubjectTagColumn.ColumnName, (Int16)Item.IDOfOther1979RosterGen1, dt.ItemColumn.ColumnName, drSubject2.SubjectID, dt.ValueColumn.ColumnName); LinksDataSet.tblResponseRow[] drsForLoopIndex = (LinksDataSet.tblResponseRow[])dt.Select(selectToGetLoopIndex); Trace.Assert(drsForLoopIndex.Length == 1, "Exactly one row should be returned matching Subject2"); Trace.Assert(drsForLoopIndex[0].SurveyYear == expectedSurveyYear, "The SurveyYear should be " + expectedSurveyYear); Int32 loopIndex = drsForLoopIndex[0].LoopIndex; string selectToRoster = string.Format("{0}={1} AND {2}={3} AND {4}={5}", drSubject1.SubjectTag, dt.SubjectTagColumn.ColumnName, (Int16)Item.RosterGen1979, dt.ItemColumn.ColumnName, loopIndex, dt.LoopIndexColumn.ColumnName); LinksDataSet.tblResponseRow[] drsForRoster = (LinksDataSet.tblResponseRow[])dt.Select(selectToRoster); Trace.Assert(drsForRoster.Length == 1, "Exactly one row should be returned for the Roster relationship to Subject2"); Trace.Assert(drsForRoster[0].SurveyYear == expectedSurveyYear, "The SurveyYear should be " + expectedSurveyYear); EnumResponsesGen1.Gen1Roster relationship = (EnumResponsesGen1.Gen1Roster)drsForRoster[0].Value; return relationship; }
internal static byte? MotherLoopIndexForChildTag( Int32 motherTag, LinksDataSet.tblSubjectRow drChild, LinksDataSet.tblResponseDataTable dtResponse ) { byte childTwoDigitID = CommonFunctions.LastTwoDigitsOfGen2SubjectID(drChild); const Item item = Item.Gen1ChildsIDByBirthOrder; string select = string.Format("{0}={1} AND {2}={3} AND {4}={5}", motherTag, dtResponse.SubjectTagColumn.ColumnName, (Int16)item, dtResponse.ItemColumn.ColumnName, childTwoDigitID, dtResponse.ValueColumn.ColumnName); LinksDataSet.tblResponseRow[] drs = (LinksDataSet.tblResponseRow[])dtResponse.Select(select); Trace.Assert(drs.Length <= 1, "At most one row should be returned."); if ( drs.Length == 0 ) return null; else return Convert.ToByte(drs[0].Value); }
internal static LinksDataSet.tblResponseDataTable ExtendedFamilyRelevantResponseRows( Int32 extendedFamilyID, string itemIDsString, Int32 minRowCount, LinksDataSet.tblResponseDataTable dtResponse ) { string select = string.Format("{0}={1} AND {2} in ({3})", extendedFamilyID, dtResponse.ExtendedIDColumn.ColumnName, dtResponse.ItemColumn.ColumnName, itemIDsString); LinksDataSet.tblResponseRow[] drs = (LinksDataSet.tblResponseRow[])dtResponse.Select(select); Trace.Assert(drs.Length >= 0, "There should be at least " + minRowCount + " row(s) returned."); LinksDataSet.tblResponseDataTable dt = new LinksDataSet.tblResponseDataTable(); foreach ( LinksDataSet.tblResponseRow dr in drs ) { dt.ImportRow(dr); } return dt; }
public static LinksDataSet.tblParentsOfGen1RetroDataTable RetrieveRows( Int32 subject1Tag, Int32 subject2Tag, LinksDataSet.tblParentsOfGen1RetroDataTable dtRetro ) { if ( dtRetro == null ) throw new ArgumentNullException("dsLinks"); if ( dtRetro.Count <= 0 ) throw new ArgumentException("There should be at least one row in tblParentsOfGen1Retro."); string select = string.Format("{0}={1} OR {2}={3}", subject1Tag, dtRetro.SubjectTagColumn.ColumnName, subject2Tag, dtRetro.SubjectTagColumn.ColumnName); LinksDataSet.tblParentsOfGen1RetroRow[] drs = (LinksDataSet.tblParentsOfGen1RetroRow[])dtRetro.Select(select); //Trace.Assert(drs.Length >= 1, "There should be at least one row."); LinksDataSet.tblParentsOfGen1RetroDataTable dt = new LinksDataSet.tblParentsOfGen1RetroDataTable(); foreach ( LinksDataSet.tblParentsOfGen1RetroRow dr in drs ) { dt.ImportRow(dr); } return dt; }
public static Tristate RetrieveInHHByYear( Int32 subjectTag, Bioparent bioparent, Int16 year, LinksDataSet.tblParentsOfGen1RetroDataTable dtRetro ) { if ( dtRetro == null ) throw new ArgumentNullException("dsLinks"); if ( dtRetro.Count <= 0 ) throw new ArgumentException("There should be at least one row in tblParentsOfGen1Retro."); string select = string.Format("{0}={1} AND {2}={3} AND {4}={5}", subjectTag, dtRetro.SubjectTagColumn.ColumnName, Convert.ToByte(bioparent), dtRetro.BioparentColumn.ColumnName, year, dtRetro.YearColumn.ColumnName); DataRow[] drs = dtRetro.Select(select); Trace.Assert(drs.Length <= 1, "There should be at most one row."); //The item asked only until they were 18. The function could be requesting a year when they were older. if ( drs.Length == 0 ) return Tristate.DoNotKnow; LinksDataSet.tblParentsOfGen1RetroRow dr = (LinksDataSet.tblParentsOfGen1RetroRow)drs[0]; if ( dr.IsInHHNull() ) return Tristate.DoNotKnow; else if ( dr.InHH ) return Tristate.Yes; else if ( !dr.InHH ) return Tristate.No; else throw new InvalidOperationException(); }
internal static MarkerGen1Summary[] RetrieveMarkers( Int64 relatedIDLeft, MarkerType markerType, LinksDataSet.tblMarkerGen1DataTable dtMarker, Int32 maxCount ) { if ( dtMarker == null ) throw new ArgumentNullException("dtMarker"); string select = string.Format("{0}={1} AND {2}={3}", relatedIDLeft, dtMarker.RelatedIDColumn.ColumnName, (byte)markerType, dtMarker.MarkerTypeColumn.ColumnName); LinksDataSet.tblMarkerGen1Row[] drs = (LinksDataSet.tblMarkerGen1Row[])dtMarker.Select(select); Trace.Assert(drs.Length <= maxCount, "The number of returns markers should not exceed " + maxCount + "."); MarkerGen1Summary[] evidences = new MarkerGen1Summary[drs.Length]; for ( Int32 i = 0; i < drs.Length; i++ ) { evidences[i] = new MarkerGen1Summary(( MarkerEvidence)drs[i].SameGeneration, (MarkerEvidence)drs[i].ShareBiomomEvidence, (MarkerEvidence)drs[i].ShareBiodadEvidence, (MarkerEvidence)drs[i].ShareBioGrandparentEvidence ); } return evidences; }
private static byte? DetermineLastHealthModuleIndex( Item item, Int32 subjectTag, LinksDataSet.tblResponseDataTable dtExtended ) { const Int16 surveyYear = ItemYears.Gen1BioparentAlive; string selectToGetLoopIndex = string.Format("{0}={1} AND {2}={3} AND {4}={5} AND {6}>=0", subjectTag, dtExtended.SubjectTagColumn.ColumnName, Convert.ToInt16(item), dtExtended.ItemColumn.ColumnName, surveyYear, dtExtended.SurveyYearColumn.ColumnName, dtExtended.ValueColumn.ColumnName); LinksDataSet.tblResponseRow[] drsForLoopIndex = (LinksDataSet.tblResponseRow[])dtExtended.Select(selectToGetLoopIndex); if ( drsForLoopIndex.Length <= 0 ) { return null; } else { byte maxLoopIndex = (from dr in drsForLoopIndex select dr.LoopIndex).Max(); return maxLoopIndex; } }
public static TrendLineGen0InHH RetrieveTrend( Bioparent bioparent, Int32 subjectTag, LinksDataSet.tblParentsOfGen1RetroDataTable dtRetro ) { //, LinksDataSet.tblSubjectDetailsDataTable dtDetail ) { if ( dtRetro == null ) return new TrendLineGen0InHH(yob: 0, hasAnyRecords: false, everAtHome: false, years: null, values: null, ages: null); else if ( dtRetro.Count <= 0 ) throw new ArgumentException("There should be at least one row in tblParentsOfGen1Retro."); string selectYears = string.Format("{0}={1} AND {2}={3}", subjectTag, dtRetro.SubjectTagColumn.ColumnName, (byte)bioparent, dtRetro.BioparentColumn.ColumnName); LinksDataSet.tblParentsOfGen1RetroRow[] drs = (LinksDataSet.tblParentsOfGen1RetroRow[])dtRetro.Select(selectYears); Trace.Assert(drs.Length >= 0, "At least zero records should be retrieved from tblParentsOfGen1Retro."); Int16 yob = (from dr in drs where dr.Age == 0 select dr.Year).First(); bool? everInHH; if ( drs[0].IsInHHNull() ) everInHH = null; else everInHH = drs[0].InHH; Int16[] years = new Int16[drs.Length]; byte[] ages = new byte[drs.Length]; bool?[] inHHs = new bool?[drs.Length]; //values = (from dr in drsYes select (YesNo)dr.BiodadInHH).ToArray(); for ( Int32 i = 0; i < drs.Length; i++ ) { years[i] = drs[i].Year; ages[i] = drs[i].Age; if ( drs[i].IsInHHNull() ) inHHs[i] = null; else inHHs[i] = drs[i].InHH; } //switch ( everInHH ) { // case YesNo.No: // Trace.Assert(drsYes.Length == 0, "If the subject says the bioparent has never lived in the HH, then there shouldn't be any more records."); // break; // case YesNo.Yes: // //This is ok. Execute the statements following the switch statement. // break; // default: // throw new ArgumentOutOfRangeException("bioparent"); //} return new TrendLineGen0InHH(yob: yob, hasAnyRecords: true, everAtHome: everInHH, years: years, values: inHHs, ages: ages); }
internal static LinksDataSet.tblRelatedStructureRow[] RelatedStructureInExtendedFamily( Int16 extendedID, RelationshipPath path, LinksDataSet.tblRelatedStructureDataTable dtStructure ) { string select = string.Format("{0}={1} AND {2}={3}", extendedID, dtStructure.ExtendedIDColumn.ColumnName, (byte)path, dtStructure.RelationshipPathColumn.ColumnName); return (LinksDataSet.tblRelatedStructureRow[])dtStructure.Select(select); }
private SurveySource DetermineSurveySource( Int16 surveyYear, LinksDataSet.tblSubjectRow drSubject, LinksDataSet.tblResponseDataTable dtResponseForSubject ) { string select = string.Format("{0}={1} AND {2}={3} AND {4}>0", surveyYear, _ds.tblResponse.SurveyYearColumn.ColumnName, (byte)Item.InterviewDateMonth, _ds.tblResponse.ItemColumn.ColumnName, _ds.tblResponse.ValueColumn.ColumnName); LinksDataSet.tblResponseRow[] drsResponse = (LinksDataSet.tblResponseRow[])dtResponseForSubject.Select(select); Trace.Assert(drsResponse.Length <= 1, string.Format("There should be at most one row with a positive value for InterviewDateMonth (SubjectTag:{0}, SurveyYear:{1}).", drSubject.SubjectTag, surveyYear)); if ( drsResponse.Length == 0 ) { return SurveySource.NoInterview; } else { SurveySource source = (SurveySource)drsResponse[0].SurveySource; switch ( source ) { case SurveySource.Gen1: Trace.Assert(drSubject.Generation == (byte)Generation.Gen1, "The subject should be Gen1."); break; case SurveySource.Gen2C: Trace.Assert(drSubject.Generation == (byte)Generation.Gen2, "The subject should be Gen2."); break; case SurveySource.Gen2YA: Trace.Assert(drSubject.Generation == (byte)Generation.Gen2, "The subject should be Gen2."); break; default: throw new InvalidOperationException("The determined SurveySource was not recognized.");//The NotInterviewed shouldn't be possible for this switch. } return source; } }
private static float? AgeSelfReportMonths( Int32 subjectTag, Int16 surveyYear, LinksDataSet.tblResponseDataTable dtResponseForSubject ) { string select = string.Format("{0}={1} AND {2}={3} AND {4}={5} AND {6}>0", subjectTag, dtResponseForSubject.SubjectTagColumn.ColumnName, surveyYear, dtResponseForSubject.SurveyYearColumn.ColumnName, (byte)Item.AgeAtInterviewDateMonths, dtResponseForSubject.ItemColumn.ColumnName, dtResponseForSubject.ValueColumn.ColumnName); LinksDataSet.tblResponseRow[] drsResponse = (LinksDataSet.tblResponseRow[])dtResponseForSubject.Select(select); Trace.Assert(drsResponse.Length <= 1, "No more than one row should be returned."); const double monthsPerYear = 12.0; if ( drsResponse.Length == 0 ) { return null; } else { Trace.Assert(drsResponse[0].Generation == (byte)Generation.Gen2, "Only Gen2 subjects should be answering this item (specifically the Cs -not the YAs)."); float ageInYears = (float)((drsResponse[0].Value + ageBiasCorrectionInMonths) / monthsPerYear); Trace.Assert(ageInYears > 0, "Age should be positive (non-null) value, at this point of the execution."); return ageInYears; } }
private static LinksDataSet.tblFatherOfGen2Row RetrieveRow( Int32 subjectTag, Int16 surveyYear, LinksDataSet.tblFatherOfGen2DataTable dtInput ) { string select = string.Format("{0}={1} AND {2}={3}", subjectTag, dtInput.SubjectTagColumn.ColumnName, surveyYear, dtInput.SurveyYearColumn.ColumnName); LinksDataSet.tblFatherOfGen2Row[] drs = (LinksDataSet.tblFatherOfGen2Row[])dtInput.Select(select); //if ( drs == null ) { if ( drs.Length <=0 ) { return null; } else { Trace.Assert(drs.Length <= 1, "There should be no more than one row."); return drs[0]; } }
internal static LinksDataSet.tblSubjectRow[] SubjectsInExtendFamily( Int16 extendedID, LinksDataSet.tblSubjectDataTable dtSubject ) { string select = string.Format("{0}={1}", extendedID, dtSubject.ExtendedIDColumn.ColumnName); LinksDataSet.tblSubjectRow[] drs = (LinksDataSet.tblSubjectRow[])dtSubject.Select(select); Trace.Assert(drs.Length > 0, "At least one member of the extended family should be returned."); return drs; }
internal static Int32? ResponseNullPossible( Int16 surveyYear, Item itemID, SurveySource surveySource, Int32 subjectTag, Int32 maxRows, LinksDataSet.tblResponseDataTable dt ) { if ( dt == null ) throw new ArgumentNullException("dt"); string select = string.Format("{0}={1} AND {2}={3} AND {4}={5} AND {6}={7}", subjectTag, dt.SubjectTagColumn.ColumnName, (Int16)itemID, dt.ItemColumn.ColumnName, surveyYear, dt.SurveyYearColumn.ColumnName, (byte)surveySource, dt.SurveySourceColumn.ColumnName); LinksDataSet.tblResponseRow[] drsRaw = (LinksDataSet.tblResponseRow[])dt.Select(select); Trace.Assert(drsRaw.Length <= maxRows, "At most, " + maxRows + " row(s) should be returned."); if ( drsRaw.Length == 0 ) return null; else return drsRaw[0].Value; }
internal static Int32? ResponseNullPossible( Item itemID, Int32 subjectTag, LinksDataSet.tblResponseDataTable dt ) { if ( dt == null ) throw new ArgumentNullException("dt"); string select = string.Format("{0}={1} AND {2}={3}", subjectTag, dt.SubjectTagColumn.ColumnName, (Int16)itemID, dt.ItemColumn.ColumnName); LinksDataSet.tblResponseRow[] drsRaw = (LinksDataSet.tblResponseRow[])dt.Select(select); Trace.Assert(drsRaw.Length <= 1, "At most one row should be returned."); if ( drsRaw.Length == 0 ) return null; else return drsRaw[0].Value; }
internal static MarkerEvidence RetrieveParentMarkerSingleYear( Int64 relatedIDLeft, MarkerType markerType, Bioparent bioparent, LinksDataSet.tblMarkerGen1DataTable dtMarker ) { if ( dtMarker == null ) throw new ArgumentNullException("dtMarker"); string select = string.Format("{0}={1} AND {2}={3}", relatedIDLeft, dtMarker.RelatedIDColumn.ColumnName, (byte)markerType, dtMarker.MarkerTypeColumn.ColumnName); string sort = dtMarker.SurveyYearColumn.ColumnName; LinksDataSet.tblMarkerGen1Row[] drs = (LinksDataSet.tblMarkerGen1Row[])dtMarker.Select(select, sort); Trace.Assert(drs.Length <= 1, "The number of returns markers should not exceed 1."); if ( drs.Length == 0 ) return MarkerEvidence.Missing; else if ( bioparent == Bioparent.Dad ) return (MarkerEvidence)drs[0].ShareBiodadEvidence; else if ( bioparent == Bioparent.Mom ) return (MarkerEvidence)drs[0].ShareBiomomEvidence; else throw new ArgumentOutOfRangeException("markerType", markerType, "The 'bioparent' value is not accepted by this function."); }
private Int32 FromShareExplicit( Item itemRelationship, MarkerType markerType, LinksDataSet.tblRelatedStructureRow drRelated, LinksDataSet.tblResponseDataTable dtSubject1 ) { const Item itemID = Item.IDCodeOfOtherSiblingGen1; Int32 surveyYearCount = ItemYears.Gen1ShareBioparent.Length; LinksDataSet.tblSubjectRow drSubject1 = drRelated.tblSubjectRowByFK_tblRelatedStructure_tblSubject_Subject1; LinksDataSet.tblSubjectRow drSubject2 = drRelated.tblSubjectRowByFK_tblRelatedStructure_tblSubject_Subject2; //Use the other subject's ID to find the appropriate 'loop index'; string selectToGetLoopIndex = string.Format("{0}={1} AND {2}={3} AND {4}={5}", drSubject1.SubjectTag, dtSubject1.SubjectTagColumn.ColumnName, Convert.ToInt16(itemID), dtSubject1.ItemColumn.ColumnName, drSubject2.SubjectID, dtSubject1.ValueColumn.ColumnName); LinksDataSet.tblResponseRow[] drsForLoopIndex = (LinksDataSet.tblResponseRow[])dtSubject1.Select(selectToGetLoopIndex); Trace.Assert(drsForLoopIndex.Length <= surveyYearCount, string.Format("No more than {0} row(s) should be returned that matches Subject2 for item '{1}'.", surveyYearCount, itemID.ToString())); if ( drsForLoopIndex.Length == 0 ) return 0; //Use the loop index (that corresponds to the other subject) to find the ShareBiomom response. //LinksDataSet.tblResponseRow drResponse = drsForLoopIndex[0]; string selectToShareResponse = string.Format("{0}={1} AND {2}={3} AND {4}={5}", drSubject1.SubjectTag, dtSubject1.SubjectTagColumn.ColumnName, Convert.ToInt16(itemRelationship), dtSubject1.ItemColumn.ColumnName, drsForLoopIndex[0].LoopIndex, dtSubject1.LoopIndexColumn.ColumnName); LinksDataSet.tblResponseRow[] drsForShareResponse = (LinksDataSet.tblResponseRow[])dtSubject1.Select(selectToShareResponse); Trace.Assert(drsForLoopIndex.Length <= surveyYearCount, string.Format("No more than {0} row(s) should be returned that matches Subject2 for item '{1}'.", surveyYearCount, Item.IDCodeOfOtherInterviewedBiodadGen2.ToString())); Int32 recordsAdded = 0; foreach ( LinksDataSet.tblResponseRow drResponse in drsForShareResponse ) { EnumResponsesGen1.ShareBioparentGen1 shareBioparent = (EnumResponsesGen1.ShareBioparentGen1)drResponse.Value; MarkerEvidence evidence = Assign.EvidenceGen1.ShareBioparentsForBioparents(shareBioparent); MarkerEvidence mzEvidence; if ( evidence == MarkerEvidence.StronglySupports ) mzEvidence = MarkerEvidence.Consistent; else mzEvidence = MarkerEvidence.Disconfirms; MarkerEvidence sameGeneration; if ( evidence == MarkerEvidence.Supports || evidence == MarkerEvidence.StronglySupports ) sameGeneration = MarkerEvidence.StronglySupports; else sameGeneration = MarkerEvidence.Ambiguous; switch ( markerType ) { case MarkerType.ShareBiodad: AddMarkerRow(drRelated.ExtendedID, drRelated.ID, markerType, drResponse.SurveyYear, mzEvidence: mzEvidence, sameGenerationEvidence: sameGeneration, biomomEvidence: MarkerEvidence.Irrelevant, biodadEvidence: evidence, biograndparentEvidence: evidence); break; case MarkerType.ShareBiomom: AddMarkerRow(drRelated.ExtendedID, drRelated.ID, markerType, drResponse.SurveyYear, mzEvidence: mzEvidence, sameGenerationEvidence: sameGeneration, biomomEvidence: evidence, biodadEvidence: MarkerEvidence.Irrelevant, biograndparentEvidence: evidence); break; default: throw new ArgumentOutOfRangeException("markerType", markerType, "The 'FromShareBioparent' function does not accommodate this markerType."); } recordsAdded += 1; } return recordsAdded; }
internal static MarkerEvidence RetrieveBiodadMarkerFromGen1( Int64 relatedIDLeft, MarkerType markerType, LinksDataSet.tblMarkerGen2DataTable dtMarker ) { if ( dtMarker == null ) throw new ArgumentNullException("dtMarker"); string select = string.Format("{0}={1} AND {2}={3}", relatedIDLeft, dtMarker.RelatedIDColumn.ColumnName, (byte)markerType, dtMarker.MarkerTypeColumn.ColumnName); string sort = dtMarker.SurveyYearColumn.ColumnName; LinksDataSet.tblMarkerGen2Row[] drs = (LinksDataSet.tblMarkerGen2Row[])dtMarker.Select(select, sort); Trace.Assert(drs.Length <= 1, "The number of returns markers should not exceed 1."); if ( drs.Length == 0 ) return MarkerEvidence.Missing; else return (MarkerEvidence)drs[0].ShareBiodadEvidence; }
private static float? AgeSelfReportYears( Int32 subjectTag, Int16 surveyYear, LinksDataSet.tblResponseDataTable dtResponseForSubject ) { string select = string.Format("{0}={1} AND {2}={3} AND {4}={5} AND {6}>0", subjectTag, dtResponseForSubject.SubjectTagColumn.ColumnName, surveyYear, dtResponseForSubject.SurveyYearColumn.ColumnName, (byte)Item.AgeAtInterviewDateYears, dtResponseForSubject.ItemColumn.ColumnName, dtResponseForSubject.ValueColumn.ColumnName); LinksDataSet.tblResponseRow[] drsResponse = (LinksDataSet.tblResponseRow[])dtResponseForSubject.Select(select); Trace.Assert(drsResponse.Length <= 1, "No more than one row should be returned."); if ( drsResponse.Length == 0 ) { return null; } else { float ageInYears = (float)drsResponse[0].Value + ageBiasCorrectionInYears; Trace.Assert(ageInYears > 0, "Age should be positive (non-null) value, at this point of the execution."); return ageInYears; } }
private Int32 FromShareBiodad( LinksDataSet.tblRelatedStructureRow drRelated, LinksDataSet.tblResponseDataTable dtSubject1, Int16 extendedID ) { const MarkerType markerType = MarkerType.ShareBiodad; const bool fromMother = true; LinksDataSet.tblSubjectRow drSubject1 = drRelated.tblSubjectRowByFK_tblRelatedStructure_tblSubject_Subject1; LinksDataSet.tblSubjectRow drSubject2 = drRelated.tblSubjectRowByFK_tblRelatedStructure_tblSubject_Subject2; Int32 lastTwoDigitsSubject2 = CommonFunctions.LastTwoDigitsOfGen2SubjectID(drSubject2); Int32 surveyYearCount = ItemYears.Gen2ShareBiodad.Length; string selectToGetLoopIndex = string.Format("{0}={1} AND {2}={3} AND {4}={5}", drSubject1.SubjectTag, dtSubject1.SubjectTagColumn.ColumnName, (byte)Item.IDCodeOfOtherInterviewedBiodadGen2, dtSubject1.ItemColumn.ColumnName, lastTwoDigitsSubject2, dtSubject1.ValueColumn.ColumnName); LinksDataSet.tblResponseRow[] drsForLoopIndex = (LinksDataSet.tblResponseRow[])dtSubject1.Select(selectToGetLoopIndex); Trace.Assert(drsForLoopIndex.Length <= surveyYearCount, string.Format("No more than {0} row(s) should be returned that matches Subject2 for item '{1}'.", surveyYearCount, Item.IDCodeOfOtherInterviewedBiodadGen2.ToString())); Int32 recordsAdded = 0; foreach ( LinksDataSet.tblResponseRow drResponse in drsForLoopIndex ) { string selectToShareResponse = string.Format("{0}={1} AND {2}={3} AND {4}={5} AND {6}={7}", drSubject1.SubjectTag, dtSubject1.SubjectTagColumn.ColumnName, (byte)Item.ShareBiodadGen2, dtSubject1.ItemColumn.ColumnName, drResponse.LoopIndex, dtSubject1.LoopIndexColumn.ColumnName, drResponse.SurveyYear, dtSubject1.SurveyYearColumn.ColumnName); LinksDataSet.tblResponseRow[] drsForShareResponse = (LinksDataSet.tblResponseRow[])dtSubject1.Select(selectToShareResponse); Trace.Assert(drsForShareResponse.Length == 1, "Exactly one row should be returned for the ShareBiodad item to Subject2"); EnumResponsesGen2.ShareBiodadGen2 shareBiodad = (EnumResponsesGen2.ShareBiodadGen2)drsForShareResponse[0].Value; MarkerEvidence mzEvidence = Assign.EvidenceGen2.ShareBiodadForBioparents(shareBiodad); MarkerEvidence biodadEvidence = Assign.EvidenceGen2.ShareBiodadForBioparents(shareBiodad); AddMarkerRow(extendedID, drRelated.ID, markerType, drResponse.SurveyYear, mzEvidence, biodadEvidence, fromMother); recordsAdded += 1; } return recordsAdded; }
private EnumResponsesGen1.Gen1Roster RetrieveResponse( Int32 subject1Tag, Int32 subject2ID, LinksDataSet.tblResponseDataTable dtFamily ) { const Item itemID = Item.IDOfOther1979RosterGen1; const Item itemRelationship = Item.RosterGen1979; Int32 surveyYearCount = 1; //The roster was asked only in 1979. //Use the other subject's ID to find the appropriate 'loop index'; string selectToGetLoopIndex = string.Format("{0}={1} AND {2}={3} AND {4}={5}", subject1Tag, dtFamily.SubjectTagColumn.ColumnName, (byte)itemID, dtFamily.ItemColumn.ColumnName, subject2ID, dtFamily.ValueColumn.ColumnName); LinksDataSet.tblResponseRow[] drsForLoopIndex = (LinksDataSet.tblResponseRow[])dtFamily.Select(selectToGetLoopIndex); Trace.Assert(drsForLoopIndex.Length <= surveyYearCount, string.Format("No more than {0} row(s) should be returned that matches Subject2 for item '{1}'.", surveyYearCount, itemID.ToString())); //Use the loop index (that corresponds to the other subject) to find the roster response. LinksDataSet.tblResponseRow drResponse = drsForLoopIndex[0]; string selectToShareResponse = string.Format("{0}={1} AND {2}={3} AND {4}={5}", subject1Tag, dtFamily.SubjectTagColumn.ColumnName, (byte)itemRelationship, dtFamily.ItemColumn.ColumnName, drResponse.LoopIndex, dtFamily.LoopIndexColumn.ColumnName); LinksDataSet.tblResponseRow[] drsForShareResponse = (LinksDataSet.tblResponseRow[])dtFamily.Select(selectToShareResponse); Trace.Assert(drsForShareResponse.Length == 1, "Exactly one row should be returned for the Item.RosterGen1979 item to Subject2"); return (EnumResponsesGen1.Gen1Roster)drsForShareResponse[0].Value; }
private static LinksDataSet.tblBabyDaddyRow RetrieveRow( Int32 subjectTag, Int16[] surveyYears, LinksDataSet.tblBabyDaddyDataTable dtInput, Int32 i ) { Int16 surveyYear = surveyYears[i]; string select = string.Format("{0}={1} AND {2}={3}", subjectTag, dtInput.SubjectTagColumn.ColumnName, surveyYear, dtInput.SurveyYearColumn.ColumnName); LinksDataSet.tblBabyDaddyRow[] drs = (LinksDataSet.tblBabyDaddyRow[])dtInput.Select(select); if ( drs.Length <= 0 ) { return null; } else { Trace.Assert(drs.Length <= 1, "There should be no more than one row."); return drs[0]; } }