【问题标题】:EF 6 select from other table without navigation propertyEF 6 从没有导航属性的其他表中选择
【发布时间】:2014-02-03 18:48:25
【问题描述】:

我有一个小问题需要帮助解决:

我有以下情况:

例如:我想选择所有养狗的学生。

我有两张桌子:

students 
id name petid

pet
id name 

但是它们之间没有指定的外键没有导航属性,虽然我有但我没有指定它并且我不想要我的情况,但我仍然想做出正确的选择语句。

所以有了导航属性,我可以这样查询:

var students = (student s in context.students where s.Pet.Name.Equals("dog").ToList();

我也会避免这样做

var students = context.students

foreach(student s in students)
{
    string pet = (from pet p in context.pets where p.Id==s.PetId select p.name).SingleOrDefault();
     if(pet=="dog")
     { 
         //do something
     } 
}

当然,制作导航属性很容易,但就我而言,我真的不想这样做。

所以我的问题是我怎样才能简单地进行这种查询,并且只有一个数据库?

【问题讨论】:

标签: c# sql entity-framework linq-to-sql


【解决方案1】:

使用连接。

var students = (from s in context.students
  join p in context.pets on s.petid equals p.id
  where p.name == "dog"
  select s).ToList();

对于 lambda 语法,您可以使用:

var students = context.students.Join(context.pets.Where(p => p.name== "dog"), //filter the pets
                             student => student.PetId, //left side key for the join
                             pet => pet.id, //right side key for the join
                             (student, pet) => student); //what do you want to select

【讨论】:

  • 我会测试它,但只是好奇如果我使用这种类型的写作查询会怎样: context.studnets.Where().Where().Select() ... 如何在这里使用 join? context.students.Where().Join(...) 我如何在这里写 lambda 中的连接?
  • 我从不喜欢连接的 Lambda 语法。恕我直言,它几乎没有可读性。
猜你喜欢
  • 2015-02-16
  • 2014-06-12
  • 2015-01-30
  • 2016-06-30
  • 2017-06-02
  • 2014-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多