如何进行Linq外连接

时间:2013-02-26 15:45:10

标签: linq left-join

我有一个包含我想要的所有值的存储库

我们称之为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 { ... };

2 个答案:

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