EF6查询构建以获取列表中的第一个对象

时间:2015-03-17 11:37:12

标签: c# .net linq entity-framework entity-framework-5

我有一个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?

1 个答案:

答案 0 :(得分:2)

如果汽车引擎的哪个记录不是V8,那么你可以使用 Any

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

如果你肯定只需要成为第一行,它就会变得更加复杂。