2015-02-04 50 views
-1

我有一個非常簡單的結構,我正在與。Linq查詢不會在反向工作

客戶做出購買

臺處於SQL相關的,我可以用得到的結果:

from p in Purchases 
where p.Price > 1000 
where p.Customer.Name == "Mary" 
select new 
{ 
    p.Customer.Name, 
    p.Description, 
    p.Price 
} 

但是,如果我扭轉表的順序,從第一客戶選擇,它給一個錯誤。

from c in Customers 
where c.Name == "Mary" 
where c.Purchases.Price > 1000 
select new 
{ 
    c.Name, 
    c.Purchases.Description, 
    c.Purchases.Price 
} 

請辭LINQPad查詢突出了where c.Purchases.Price > 1000線問題和錯誤消息:

System.Data.Linq.EntitySet」不包含一個定義 ‘價格’和沒有擴展方法「價格」接受 類型「System.Data.Linq.EntitySet」的 第一個參數可以發現 (按F4添加using指令或組件參考)

爲什麼我可以通過購買獲取數據,但不通過客戶?

回答

1

因爲c.Purchases集合的購買,並沒有一個Price財產。

可以加盟客戶購買並在p.Price > 1000得到的所有結果,但你必須重複加入了導航屬性隱藏條款:

from c in Customers 
join p in Purchases on c.Id equals p.CustoimerId 
where c.Name == "Mary" && p.Price > 1000 
select new 
{ 
    c.Name, 
    p.Description, 
    p.Price 
} 
+0

所以這是因爲這種關係的基數?因爲購買在關係的許多方面,它是一個集合,並且無需直接交互就不顯式加入表?但是第一個例子,我在關係的一方與客戶進行交互,這很好嗎? – KevenDenen

+0

是的 - 有一位顧客購買,所以你可以直接訪問它的屬性。 –