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"));