我有這樣的代碼對LINQ選擇項目Lambda表達式
var list = _db.Projects.Where(item => item.Loc =="IN").Select(p => new {id=p.Id, title=p.Title,pc=p.PostalCode });
有很多列的項目表,我需要從數據庫中動態和加載查詢所需的列,不隨數據的所有列。
問題:
- 如何編寫lambda表達式LINQ的選擇?
- 如何通過選擇特定列,實體框架來減少數據庫讀取數據?
我有這樣的代碼對LINQ選擇項目Lambda表達式
var list = _db.Projects.Where(item => item.Loc =="IN").Select(p => new {id=p.Id, title=p.Title,pc=p.PostalCode });
有很多列的項目表,我需要從數據庫中動態和加載查詢所需的列,不隨數據的所有列。
問題:
看看生成的C#編譯器和嘗試複製它做什麼的表達:
Expression<Func<Project, object>> lambda =
(Project p) => (object)new {id=p.Id, title=p.Title,pc=p.PostalCode };
我希望這個代碼編譯。如果沒有,你一定能夠修復它。之後,查看lambda
變量的內容。
請注意,投到object
只是在那裏進行編譯。你不需要/希望那是生產。
嗨,我需要改變。選擇(p => new {id = p.Id,title = p.Title,pc = p.PostalCode});與必填字段。 –
@RameshBolla查看C#編譯器生成的表達式,以便了解它的外觀。你必須自己構建一個只包含必需字段的表達式。使用'Expression'類。 – usr
嗯......目前還不清楚你需要什麼,因爲你發佈的代碼似乎回答你自己的問題。你可以說得更詳細點嗎?你想要返回的對象是一個特定的類型?另外,除非您有一些存儲大量數據的列,否則選擇較少的列不太可能顯着提高您的性能。 –
嗨本Tidman,我需要建立一個選擇動態查詢與必填字段。所以我需要使用lamda表達式或linq表達式來獲取.Select(p => new {id = p.Id,title = p.Title,pc = p.PostalCode})的動態代碼。 –
如果您要動態創建匿名類型(這似乎是您想要的),您將如何訪問其成員? – svick