查询语法有效,但lambda语法无效;t表示linq-select语句

本文关键字:语法 表示 语句 linq-select lambda 有效 查询 无效 | 更新日期: 2023-09-27 18:27:39

此代码不起作用:

return this.Context.StockTakeFacts.Select(stf => ((stf.StockTakeId == stocktakeid) && (stf.FactKindId == ((int)kind)))).ToList<IStockTakeFact>();

这句话的作用是:

        var f = from stf in this.Context.StockTakeFacts
                where (stf.StockTakeId == stocktakeid) && (stf.FactKindId == ((int)kind))
                select stf;
        return f.ToList<IStockTakeFact>();

有什么区别??第一个抱怨IQueryable没有toList方法,所以我认为我写错了第一个语句。

查询语法有效,但lambda语法无效;t表示linq-select语句

您需要使用Where调用来过滤元素(而不是Select

return this.Context.StockTakeFacts
  .Where(stf => ((stf.StockTakeId == stocktakeid) && (stf.FactKindId == ((int)kind))))
  .ToList<IStockTakeFact>();

当使用显式LINQ API查询时,select item是隐式的。可以通过调用Select使其显式,但这不是必需的(除非您以某种方式映射值)

您必须使用Where()才能通过谓词进行筛选:

return this.Context.StockTakeFacts
                    .Where(stf => stf.StockTakeId == stocktakeid 
                                  && stf.FactKindId == (int)kind)
                    .ToList<IStockTakeFact>();