2014-01-25 21 views
0

您好我正在運行一個Linq查詢來加入三個表。下面是查詢...如何檢查列是否存在於Linq連接查詢c#中?

answerText = ds.Tables[0]; 
questionAvg = ds.Tables[1]; 
interviews = ds.Tables[2]; 

var data = from at in answerText.AsEnumerable() 
      join qa in questionAvg.AsEnumerable() on at.Field<int>("ID") equals qa.Field<int>("DealerID") 
      join inter in interviews.AsEnumerable() on at.Field<int>("ID") equals inter.Field<int>("DealerID") 
      select new 
      { 
       DealerID = at.Field<int>("ID"), 
       DealerName = at.Field<string>("Name"), 
       AnswerText1 = at.Field<int?>("12"),       
       AnswerText2 = at.Field<int?>("8"), 
       AnswerText3 = at.Field<int?>("4"), 
       AnswerText4 = at.Field<int?>("0"), 
       AnswerText5 = at.Field<int?>("-4"), 
       Rank = qa.Field<Int64?>("Rank"), 
       Average = qa.Field<decimal?>("Average"), 
       N = inter.Field<int?>("N") 
      }; 

現在有時候answerText datatable將只有列12和8 ..,所以它是缺少列4 0 -4。我應該如何避免上述查詢中的列檢查,並在那裏提供0。

+0

你會得到例外嗎? –

回答

0

我不是100%確定你在問什麼,但我認爲你需要AnswerText屬性是int而不是int?。當項目不存在時,它們應設置爲0。您可以使用??運營商:

var data = from at in answerText.AsEnumerable() 
      join qa in questionAvg.AsEnumerable() on at.Field<int>("ID") equals qa.Field<int>("DealerID") 
      join inter in interviews.AsEnumerable() on at.Field<int>("ID") equals inter.Field<int>("DealerID") 
      select new 
      { 
       DealerID = at.Field<int>("ID"), 
       DealerName = at.Field<string>("Name"), 
       AnswerText1 = at.Field<int?>("12") ?? 0,       
       AnswerText2 = at.Field<int?>("8") ?? 0, 
       AnswerText3 = at.Field<int?>("4") ?? 0, 
       AnswerText4 = at.Field<int?>("0") ?? 0, 
       AnswerText5 = at.Field<int?>("-4") ?? 0, 
       Rank = qa.Field<Int64?>("Rank"), 
       Average = qa.Field<decimal?>("Average"), 
       N = inter.Field<int?>("N") 
      }; 
+0

我的問題是關於answerText數據表中的列存在不確定性。在某些情況下,它不會給我第4,0,-4列。那麼如何避免這種情況呢? –

相關問題