Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 与“正常”方式相比(如果存在导航属性)。@Evk几乎相同。由于模型中不清楚是否需要FK列,因此按照惯例EF认为FK列是可选的,因此仅以正常方式生成左侧外部联接而不是内部联接。因此,为了使它们完全相同,LINQ查询应该以更丑陋的方式编写。 public cl_C#_Entity Framework - Fatal编程技术网

C# 与“正常”方式相比(如果存在导航属性)。@Evk几乎相同。由于模型中不清楚是否需要FK列,因此按照惯例EF认为FK列是可选的,因此仅以正常方式生成左侧外部联接而不是内部联接。因此,为了使它们完全相同,LINQ查询应该以更丑陋的方式编写。 public cl

C# 与“正常”方式相比(如果存在导航属性)。@Evk几乎相同。由于模型中不清楚是否需要FK列,因此按照惯例EF认为FK列是可选的,因此仅以正常方式生成左侧外部联接而不是内部联接。因此,为了使它们完全相同,LINQ查询应该以更丑陋的方式编写。 public cl,c#,entity-framework,C#,Entity Framework,与“正常”方式相比(如果存在导航属性)。@Evk几乎相同。由于模型中不清楚是否需要FK列,因此按照惯例EF认为FK列是可选的,因此仅以正常方式生成左侧外部联接而不是内部联接。因此,为了使它们完全相同,LINQ查询应该以更丑陋的方式编写。 public class Team { [Key] public int Id { get; set; } public string Name { get; set; } public List<Member> Me


与“正常”方式相比(如果存在导航属性)。@Evk几乎相同。由于模型中不清楚是否需要FK列,因此按照惯例EF认为FK列是可选的,因此仅以正常方式生成
左侧外部联接
而不是
内部联接
。因此,为了使它们完全相同,LINQ查询应该以更丑陋的方式编写。
public class Team {
    [Key]
    public int Id { get; set; }
    public string Name { get; set; }
    public List<Member> Members { get; set; }
}

public class Member {
    [Key]
    public int Id { get; set; }
    public string Name { get; set; }
}

public class Pet {
    [Key]
    public int Id { get; set; }
    public string Name { get; set; }
    public Member Member { get; set; }
}
public class PetViewModel {
    public string Name { get; set; }
    public string TeamItIndirectlyBelongsTo { get; set; }
}
public PetViewModel[] QueryPetViewModel_1(string pattern) {
    using (var context = new MyDbContext(connectionString)) {
        return context.Pets
            .Where(p => p.Name.Contains(pattern))
            .ToArray()
            .Select(p => new PetViewModel {
                Name = p.Name,
                TeamItIndirectlyBelongsTo = "TODO",
            })
            .ToArray();
    }
}
public PetViewModel[] QueryPetViewModel_2(string pattern) {
    using (var context = new MyDbContext(connectionString)) {
        var petInfos = context.Pets
            .Where(p => p.Name.Contains(pattern))
            .Join(context.Members,
                p => p.Member.Id,
                m => m.Id,
                (p, m) => new { Pet = p, Member = m }
            )
            .ToArray();

        var result = new List<PetViewModel>();

        foreach (var info in petInfos) {
            var team = context.Teams
                .SingleOrDefault(t => t.Members.Any(m => m.Id == info.Member.Id));

            result.Add(new PetViewModel {
                Name = info.Pet.Name,
                TeamItIndirectlyBelongsTo = team?.Name,
            });
        }

        return result.ToArray();
    }
}
var result = (
    from team in context.Teams
    from member in team.Members
    join pet in context.Pets on member.Id equals pet.Member.Id
    where pet.Name.Contains(pattern)
    select new PetViewModel
    {
        Name = pet.Name,
        TeamItIndirectlyBelongsTo = team.Name
    }).ToArray();