[英]Entity Framework 4: How to code projection to a class type?
如果我有如下課程:
public class Customer {
public int id {get;set;}
public string name {get;set;}
public string line1 {get;set;}
public string line2 {get;set;}
public string line3 {get;set;}
public string line4 {get;set;}
}
我只想選擇ID和Name值,其余的留為null。
var myCustomerList = DC.Customer.Select(
p => new Customer { id = p.id, name = p.name });
我收到以下錯誤:
The entity or complex type 'MyModel.Customer' cannot
be constructed in a LINQ to Entities query.
你還會怎么做? 我是否需要指定所有班級字段?
嘗試這個:
var myCustomerList = from c in DC.Customer
select new { id = p.id, name = p.name };
上面將創建一個Anonymous Type 。
實際應用:
“ var myCustomerList” <-匿名類型。
具有兩個屬性“ id”和“ name”的匿名類型。 另外,“ var”還允許您創建一個隱式類型的局部變量。 這意味着:
a)您不必聲明/編寫一個僅包含這兩個屬性的類結構即可;
b)您也不需要維護任何一個-您可以更改上述查詢的結構,並且“它確實有效”。
另一個選擇是創建一個CustomerInfo類型:
public class CustomerInfo
{
public int Id { get; set;}
public string Name { get; set; }
}
您不能將兩種類型直接映射到EF中的同一表,但是可以輕松地為您的信息類型創建視圖,然后映射到該視圖:
CREATE VIEW vwCustomerInfo AS SELECT Id, Name FROM Customer
然后,將CustomerInfo類型映射到視圖:
public class CustomerInfoMap : EntityConfiguration<CustomerInfo>
{
public CustomerInfoMap()
{
.ToTable("vwCustomerInfo");
}
}
這樣做的副作用是,EF僅在查詢數據庫時才檢索視圖中的列。 通過ID檢索CustomerInfo時,您將獲得如下所示的SQL:
SELECT ID,名稱來自vwCustomers,ID = 1
此外,只要您的視圖是可更新的,就可以從EF更新CustomerInfo類型,並且基礎表將被更新。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.