Linq关联3个表查询无结果:如何取ToolList全量数据并补其余两表数据
解决方案
问题根因
你使用的是**内连接(Inner Join)**关联三张表,内连接要求所有关联表同时存在匹配记录才会返回结果,你的场景下ToolList的三条记录没有任何一条能同时匹配ToolLocation和TemplateLocation的记录,因此查询无返回。
修改方案
将内连接改为左外连接,保留ToolList的全部记录,无匹配的关联字段填充-即可,修改后代码如下:
var test = (from t in db.ToolLists join l in db.ToolLocations on t.ToolNumber equals l.ToolNumber into lGroup from l in lGroup.DefaultIfEmpty() join temp in db.TemplateLocations on t.ToolNumber equals temp.ToolNumber into tempGroup from temp in tempGroup.DefaultIfEmpty() orderby t.ToolNumber select new { ToolNumber = t.ToolNumber, ToolLocation = l != null ? l.Location : "-", TemplateLocation = temp != null ? temp.Location : "-" } );
如果你的Location属性是数值类型而非字符串,可以调整空值处理逻辑:
ToolLocation = l != null ? l.Location.ToString() : "-"
内容的提问来源于stack exchange,提问作者Eric Snyder
相关产品推荐
相关产品推荐

