2012-07-31 82 views
0

我在C#中使用實體框架4。我有Contact對象的參考實體集合爲Addresses。因此,一個Contact可以有多個Address實體。我想要做的是將與Contact相關聯的返回Addresses過濾爲僅來自多倫多市。使用實體框架4如何過濾引用的實體集合

這是我正在使用的LINQ查詢,但它返回所有Addresses,只要至少有一個有City == "Toronto"。我想限制Address實體返回只包含Address實體有City == "Toronto"。我怎樣才能構建LINQ查詢來做到這一點?

var vcontact = from c in context.Contacts 
       orderby c.LastName 
       where c.Addresses.Any(a => a.City == "Toronto") 
       select c; 
+0

你想誰在多倫多隻需多倫多地址的地址的聯繫人列表? – Brian 2012-07-31 23:11:42

+0

是的。我想要在多倫多至少有一個地址與任何聯繫人聯繫,並且返回的地址實體只應包括城市爲多倫多的地址。 – user31673 2012-07-31 23:14:05

回答

4
var vcontact = from c in context.Contacts 
       orderby c.LastName 
       where c.Addresses.Any(a => a.City == "Toronto") 
       select new Contact 
       { 
        LastName = c.LastName; 
        // map all remaining properties of Contact 
        Addresses = c.Addresses.Where(a => a.City == "Toronto") 
       }; 
+0

謝謝您的代碼。 LINQ查詢無法在大括號之前使用Contact進行編譯。無論如何要命名你想要做的匿名類型? – user31673 2012-08-01 02:15:06

+0

@ user31673 - 真的嗎? 「無法編譯」?你能再模糊一點嗎? – 2012-08-01 05:17:21

+0

@ user31673,你能否粘貼你收到的錯誤? 「Contact」並不是一種匿名類型,它只是您實體的一個新實例。如果您想使用命名類型,請創建一個新類(可能是'ContactViewModel')並使用它來代替'Contact'。 – devuxer 2012-08-01 22:08:11