【问题标题】:Null Value when using IQueryable with Entity Framework将 IQueryable 与实体框架一起使用时的空值
【发布时间】:2013-03-25 09:59:49
【问题描述】:

假设我有这个 IQueryable 变量:

var result= (from fruit in fruitTable 
                 join dapple in applesIQuery on fruit.fruitType equals dapple.fruitType into apples 
                 from apple in apples.DefaultIfEmpty()
                 select new foo );

applesIQuery 来自另一个 IQueryable,它由另一组连接组成。

applesIQuery =(from a in anotherTable select new {id = foo}) ;

我需要处理applesIQuery == null 的情况,基本上是创建一个 id=0 的 1 个元素的列表,但没有将 IQueryable 转换为 IEnumerable。类似的东西:

applesIQuery =(from a in anotherTable select new {id = foo})?? Iqueriable {new {id=0}} ;

任何指向正确方向的指针?

【问题讨论】:

  • 您当然可以构造这样的查询,但它会在运行时失败,因为 EF 无法翻译它。 EF LINQ 支持很差,而且是固定的。
  • 一个解决方案是为该查询构建一个 poco entioty。我需要为以后的查询这样做;这是我想避免的事情
  • 我的观点是 EF 无法处理您自己创建序列的任何类型的查询。里面有什么并不重要(无论是实体、其他对象还是简单的整数)。它将编译并出错。
  • 由于(from a in anotherTable select new {id = foo}) 的结果,applesIQuery 如何为空?从理论上讲,您应该在查询结果上调用 .Count() 。所以恕我直言,根据公开的代码,applesIQuery 永远不会为空。
  • 发布的代码只是为了创建一个场景。基本上 apples 是 9 个表之间的连接(3 个内连接,6 个左外连接),在某些情况下结果为 null。

标签: linq entity-framework linq-to-entities


【解决方案1】:

applesIQuery 是 IQueryable 类型,不会为空。假设您的意思是如果查询没有返回任何结果,请尝试以下操作:

applesIQuery = applesIQuery.Count() == 0 ? new ArrayList(){ new { id = 0 } }.AsQueryable() : applesIQuery;

【讨论】:

  • 这正是我使用的。花了我一段时间才得出结论:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-18
  • 2019-02-03
相关资源
最近更新 更多