2012-03-14 57 views
1

此代碼不起作用:查詢語法的作品,但lambda語法不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方法,所以我收集我寫錯了第一個語句。

回答

4

您需要使用Where調用,以便過濾元件(未Select

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

當使用LINQ明確API查詢select item是隱含的。它可以由明確的一起Select來電,但(除非你映射在某種程度上值)必須使用Where()以被斷言能夠過濾

1

這是沒有必要:

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