簡體   English   中英

如何在實體框架中獲取一些實體列?

[英]How to get some columns of entity in entity-framework?

假設我有一個超過1000000列的表。 當我使用LINQ To SQLEntity-Framework所有查詢都將在c#中編寫,如下所示:

EFContext.MyTableName.Where(row=>row.column1==someValue)
                     .Select(...)
                     .FirstOrDefault(...)
                     .Any(...)
                     ...

如何只獲得實體的一些列? 有沒有辦法只獲得1000000列中的第1列和第2列和第3列?

注意:

結果數據的類型應該在選擇后保留,例如,如果沒有過濾某些列類型的結果是Type1,那么非常重要的是,在過濾之后,結果的類型是Type1,但是過濾的Type1的那些屬性的值應該是null或default。

要獲得一些ROWS,您可以使用:

.Take(3);

要只獲得一些列,您可以使用:

.Select(x => new MyType() { Column1 = x.Column1, Column2 = x.Column2 })

請注意,該對象現在未附加到objectcontext,因此它不會受到SaveChanges()的影響。 但是你只會選擇幾列,類型仍然是正確的。

要獲取自己的默認值而不是變量類型的框架默認值,可以修改構造函數類型以設置默認值。

我知道你在Entity Framework中獲得列的一個子集的唯一方法是創建一個新的實體類,它只有你感興趣的列並將它映射到同一個表。 在查詢該實體時,EF將不會選擇這些列。 您還可以在需要時繼續使用完整實體 - 沒有任何內容表示您不能將兩個實體類映射到同一個表。 或者三個。 或者四個......

根據數據庫定義,子集實體可能完全不足以插入或更新行而不違反約束,但它可以是一個非常有用的工具,可以減少您對選擇所做的不必要的數據傳輸量,以及實現具有許多不需要的列的實體的時間損失(這可能非常重要)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM