您好我正在运行一个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。
答案 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")
};