Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.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# EF6查询building以获取列表中的第一个对象_C#_.net_Linq_Entity Framework_Entity Framework 5 - Fatal编程技术网

C# EF6查询building以获取列表中的第一个对象

C# EF6查询building以获取列表中的第一个对象,c#,.net,linq,entity-framework,entity-framework-5,C#,.net,Linq,Entity Framework,Entity Framework 5,我有一辆汽车等级: public class Car { public int Id { get; set; } public List<Engine> Engine { get; set; } } public class Engine { public int Id { get; set; } public string EngineName{ get; set; } } //这不管用 i

我有一辆
汽车
等级:

public class Car
    {
      public int Id { get; set; }
      public List<Engine> Engine { get; set; } 
    }

public class Engine
    {
      public int Id { get; set; }
      public string EngineName{ get; set; } 
    }
//这不管用

  if(windIscold)
  {
      querybuilder = querybuilder.Where(e =>e.Engine.FirsOrDefault().EngineName == "V8" )

   // e =>e.Engine.FirsOrDefault().EngineName value is null when in the db I have V8..
  }
我只需要在发动机的第一个记录上进行验证,尽管事实是一辆车与多个发动机的关系。。我该怎么做?我是否应该创建一个子选择,只返回第一个发动机记录?

如果哪一个记录是汽车发动机的V8,则可以使用任何记录:

 querybuilder = querybuilder.Where(e => e.Engine.Any(a => a.EngineName == "V8"));

如果您确实只需要成为第一行,它将变得非常复杂。

您不能在linq to entities中的where子句中使用FirstOrDefault。。。这将起作用:querybuilder.Where(c=>c.Engine.Any(e=>e.engineame==“V8”))我已经找到了一个解决方案。当您从数据库中获取所有数据时,只需使用第一条记录进行排序。获取和映射所有数据需要资源。。。传输所有数据的内存和时间…OrderBy with Take(1)或FirstOrDefault()显然是一个选择,因为这会被转换为选择SQLTOP 1。当您依赖于记录的顺序时,这不是很好的数据库设计。。。所有行都应该依赖于键,只有键,只有键。。。所以Codd帮我。。。
  if(windIscold)
  {
      querybuilder = querybuilder.Where(e =>e.Engine.FirsOrDefault().EngineName == "V8" )

   // e =>e.Engine.FirsOrDefault().EngineName value is null when in the db I have V8..
  }
 querybuilder = querybuilder.Where(e => e.Engine.Any(a => a.EngineName == "V8"));