如何进行Linq外部联接

如何进行Linq外部联接,linq,left-join,Linq,Left Join,我有一个包含我想要的所有值的存储库 我们将其称为fieldsRepo 然后我有一个包含字段值的实体。我们将其称为entity.FieldValues 我需要编写一个查询,从fieldsRepo获取所有字段,并从entity.FieldValues获取它们的值(如果存在) 如何将其写为带有左连接的LINQ,这将过滤掉实体不包含字段的地方。我希望他们仍然包括在内 var query = from field in fieldsRepo join entityField in

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

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

使用
join。。进入
(即GroupJoin)。每个连接的组将包含与字段值相关的值(如果有)


您必须使用DefaultIfEmpty

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