如何检查Linq连接查询c#中是否存在列?

时间:2014-01-25 07:15:50

标签: c# linq linq-to-objects

您好我正在运行一个Linq查询以加入三个表。以下是查询...

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数据表只有第12列和第8列..所以它缺少列4 0 -4。我应该如何避免上述查询中的列检查,并在那里提供0。

1 个答案:

答案 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")
           };