我的tagNumbers属于List<string>
类型。我需要在此列表上使用数据库进行左连接。目前,当我在数据库上开始跟踪时,我看到很多查询被触发,因为此列表中没有任何记录。此LINQ查询在使用LEFT JOIN时也会出错,即lj.DefaultIfEmpty()
,因为对于某些记录,如果LEFT JOIN为l.TagId将为NULL
即。
SELECT * FROM tagNumbers LEFT JOIN TagCollections ON.....LEFT JOIN...
from t in tagNumbers
join tc in dbContext.TagCollections on t equals tc.TagNumber into lj
from l in lj.DefaultIfEmpty()
join m in dbContext.MapTagEntities on l.TagId equals m.TagId
select new GetItemByTagnumberResponse
{
//DO SOMETHING
}
错误
Object reference not set to an instance of an object
上的join m in dbContext.MapTagEntities on l.TagId equals m.TagId
l.TagId因为&#34; l&#34;在LEFT JOIN的情况下为NULL,其中连接条件不匹配。
答案 0 :(得分:0)
这可以使用GroupJoin完成。这是一个简单的实现。
// When
var results = fruitIds
.GroupJoin(db.Fruits, id => id, fruit => fruit.Id, (id, fruits) => new
{
id = id,
fruit = fruits.FirstOrDefault()
})
.GroupJoin(db.Attributes, f => f.fruit != null ? f.fruit.Id : 0, att => att.Id, (fruitContainer, attributes) => new
{
id = fruitContainer.id,
fruit = fruitContainer.fruit,
attribute = attributes.FirstOrDefault()
})
.ToList();
// Then
Assert.AreEqual(3, results.Count);
Assert.AreEqual(2, results.Where(r => r.fruit != null).Count());
Assert.AreEqual(1, results.Where(r => r.attribute != null).Count());
很抱歉水果实施,我已经写好了,我只需要做正确的查询。