0

這是我簡化示例中的問題。實體在LINQ to Entities中不可用的屬性

我從SQL Server數據庫建模兩個實體:

  1. 訂單(列可用=訂單ID,PackageCount,ManufactureDate可以,並按ShipDate,StatusID)主鍵=的OrderID)
  2. OrderRecipients(可用= RecipientID列,名字,姓氏,地址,城市,郵政編碼,國家,訂單ID;外鍵=訂單ID)

Orders和OrderRecipients之間存在[1到多]關係。一個訂單可以有幾個收件人。

我想通過下面的代碼提取訂單的收件人。

var allmyrecipients = from o in mycontext.Orders 
         where (o.SiteID.Equals("NYC") || o.SiteID.Equals("SFO")) 
         select o.OrderRecipients; 

然而,當我試圖讓下面的代碼收件人的名字:

foreach (var recipient in allmyrecipients) 
{ 
    Console.WriteLine(recipient.FirstName); 
} 

名字和收件人的其他屬性都無法在智能感知下拉。我得到「不包含名字的定義」錯誤。

這是什麼和補救措施是什麼?我在這裏做錯了什麼?我正在與VS 2010,Entity Framework 4一起工作。

謝謝你抽出時間幫忙。

+0

UPDATE1:我想這段代碼,它不會引發錯誤:'的foreach(在allmyrecipients VAR收件人){的foreach(在收件人變種R){Console.WriteLine(R 。名稱); }}這是爲什麼? – FMFF

回答

1

編輯:我重構到財產以後,應該工作使用SelectMany這一點。這給一個鏡頭:

var orders = from o in mycontext.Orders 
    where (o.SiteID.Equals("NYC") || o.SiteID.Equals("SFO")) 
    select o; 

foreach (var recipient in orders.SelectMany(r => r.OrderRecipients)) 
{ 
    Console.WriteLine(recipient.FirstName); 
} 
+0

就這樣,我得到以下錯誤:'無法隱式轉換類型「System.Linq.IQueryable >」到「System.Linq.IQueryable 」。存在明確的轉換(您是否缺少演員?)' – FMFF

+0

更正並重構。我相信SelectMany應該正確處理投影。 –

+0

您的回覆指出我正確的方向。 LINQ查詢實際上返回許多訂單,每個訂單都有很多收件人。這就是它拋出轉換錯誤的原因。非常感謝你。 – FMFF