此代码不起作用:
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方法,所以我收集到我写错了第一个语句。
答案 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>();