【问题标题】:Handling empty collections in Entity Framework在实体框架中处理空集合
【发布时间】:2015-06-12 01:34:00
【问题描述】:

我在实体框架中填写了一个列表;

    List<StockProperties> props = db.StockProperties
                                    .Where(prop => prop.Stok_ID == stok.ID)
                                    .ToList();

这里的问题是,如果我的查询为空,它会返回一个

非静态方法需要一个目标。

错误很明显,因为 EF 使用空序列执行此操作。我的问题是处理这些空查询的最合理方法是什么?如果我的查询返回空序列,我希望我的列表为空。

【问题讨论】:

  • “如果我的查询为空”?我在这里看不到任何空值,除了 stok
  • DefaultIfEmpty 是一种方便的方法,您可以在此处使用。您可以为每个股票指定默认值。另外,为什么不检查 List 是否为 null 或 List.Length > 0
  • 我没有得到这个,是抛出异常还是 propssimply 只是 null ?因为您的代码似乎没有任何问题,如果 EF 查询返回 0 行,您应该得到一个空列表。如果它是一个异常,你能告诉我们堆栈跟踪吗?
  • 代码示例应该返回一个空的List&lt;StockProperties&gt;(假设没有匹配)。如果不是,您需要提供更多详细信息。当您尝试使用该列表时,是否可能稍后会发生异常?

标签: c# entity-framework


【解决方案1】:

这个:

List<StockProperties> props = db.StockProperties
                                .Where(prop => false)

返回一个有 0 条记录的 System.Linq.Enumerable.WhereListIterator&lt;StockProperties&gt;,它永远不会是 null

您的问题可能出在prop =&gt; prop.Stok_ID == stok.ID

是否声明了 stok?

查看here

【讨论】:

    【解决方案2】:

    您可以为null 提供后备选项

    var props = 
        db.StockProperties.Where(prop => prop.Stok_ID == stok.ID)
        ?? Enumerable.Empty<StockProperties>();
    

    var props = 
        db.StockProperties.Where(prop => prop.Stok_ID == stok.ID).ToList()
        ?? new List<StockProperties>();
    

    【讨论】:

    • Queryable.Where(或Enumerable.Where)不会永远返回null值。
    猜你喜欢
    • 1970-01-01
    • 2013-10-19
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 1970-01-01
    • 2018-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多