37
我可以讓我的EF對象只檢索執行的sql中的特定列嗎?如果我正在執行下面的代碼來檢索對象,有什麼我可以做的只是如果想要獲得某些列?只能得到特定列
public IEnumerable<T> GetBy(Expression<Func<T, bool>> exp)
{
return _ctx.CreateQuery<T>(typeof(T).Name).Where<T>(exp);
}
這將生成一個包含所有列的select子句。但是,如果我有一個列包含大量的數據,真的會減慢查詢,我怎樣才能讓我的對象從sql中排除該列?
如果我的表已經ID(INT),狀態(INT),數據(BLOB),我怎樣才能讓我的查詢是
select Id, Status from TableName
,而不是
select Id, Status, Data from TableName
從下面的建議,我的方法是
public IEnumerable<T> GetBy(Expression<Func<T, bool>> exp, Expression<Func<T, T>> columns)
{
return Table.Where<T>(exp).Select<T, T>(columns);
}
我打電話像這樣
mgr.GetBy(f => f.Id < 10000, n => new {n.Id, n.Status});
但是,我得到一個編譯錯誤:
Cannot implicitly convert type 'AnonymousType#1' to 'Entities.BatchRequest'
我想以通用的方式做到這一點,以便我可以簡單地嚮應該返回的列的GetBy方法調用添加另一個參數。 – Brian 2009-10-07 14:41:01
您需要將選擇表達式與where表達式一起傳遞,然後,即:var foo = GetBy(r => r.Id == someId,r => new {r.Id,R.Status}); – 2009-10-07 14:46:43
編輯我的帖子上面有更多的信息 – Brian 2009-10-07 15:07:03