我有一个包含我想要的所有值的存储库
我们称之为fieldsRepo
然后我有一个包含字段值的实体。我们称之为entity.FieldValues
我需要编写一个查询来获取fieldsRepo
中的所有字段,以及entity.FieldValues
中的值(如果存在)。
如何使用左连接将其写为LINQ,这将过滤掉实体不包含字段的位置。我希望他们仍然被包括在内。
var query = from field in fieldsRepo
join entityField in entity.FieldValues
on field.Id equals entityField.FieldId
select new { ... };
答案 0 :(得分:2)
您必须使用DefaultIfEmpty
http://msdn.microsoft.com/en-us/library/vstudio/bb397895.aspx
var query = from person in people
join pet in pets on person equals pet.Owner into gj
from subpet in gj.DefaultIfEmpty()
select new { person.FirstName, PetName = (subpet == null ? String.Empty : subpet.Name) };
答案 1 :(得分:1)
使用join .. into
(即GroupJoin)。每个连接组将包含与字段值相关的字段值(如果有)
var query = from field in fieldsRepo
join entityField in entity.FieldValues
on field.Id equals entityField.FieldId into g
select new {
field.Id,
ValuesCount = g.Count()
};