Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.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# EF 6从没有导航属性的其他表中选择_C#_Sql_Entity Framework_Linq To Sql - Fatal编程技术网

C# EF 6从没有导航属性的其他表中选择

C# EF 6从没有导航属性的其他表中选择,c#,sql,entity-framework,linq-to-sql,C#,Sql,Entity Framework,Linq To Sql,我有一个小问题需要帮助解决: 我有以下情况: 例如:我想选择所有有狗的学生 我有两张桌子: students id name petid pet id name 但是它们之间没有指定的外键没有导航属性,虽然我已经指定了,但我还没有指定它,我不想使用我的示例,但我仍然希望生成正确的select语句 因此,使用导航属性,我可以如下查询: var students = (student s in context.students where s.Pet.Name.Equals("dog").T

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

我有以下情况:

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

我有两张桌子:

students 
id name petid

pet
id name 
但是它们之间没有指定的外键没有导航属性,虽然我已经指定了,但我还没有指定它,我不想使用我的示例,但我仍然希望生成正确的select语句

因此,使用导航属性,我可以如下查询:

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
     } 
}
当然,创建导航属性很容易,但就我而言,我真的不想这样做

因此,我的问题是,如何简单地执行这种查询,并且只使用一个to DB?

使用连接

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编写连接?下面是一个使用Lamda的示例,我从来都不喜欢连接的lambda语法。它的可读性差,IMHO。制作导航属性并不容易,如果有人需要,请参阅