查询语法有效,但lambda语法不适用于linq select语句

时间:2012-03-14 07:18:58

标签: c# linq select

此代码不起作用:

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方法,所以我收集到我写错了第一个语句。

2 个答案:

答案 0 :(得分:4)

您需要使用Where调用才能过滤元素(不是Select

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

使用显式LINQ API查询时,select item是隐式的。可以通过调用Select来明确它,但它没有必要(除非您以某种方式映射值)

答案 1 :(得分:1)

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

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