我有一个Car
课程:
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; }
}
我想创建一个如下所示的选择查询:
IQueryable<Car> querybuilder = carDbSet.Include(x=>x.Engine); // simple example
//这有效
if(sunIsShining)
{
querybuilder = querybuilder.Where(e =>e.Id == 5) // all records where carId = 5
}
//这不起作用
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..
}
我只需要在发动机的第一个记录上进行验证,尽管事实上这种关系对于许多引擎来说是1车...我该怎么做?我应该以某种方式创建一个只返回第一个引擎记录的subSelect?
答案 0 :(得分:2)
如果汽车引擎的哪个记录不是V8,那么你可以使用 Any :
querybuilder = querybuilder.Where(e => e.Engine.Any(a => a.EngineName == "V8"));
如果你肯定只需要成为第一行,它就会变得更加复杂。