2016-11-08 57 views
0

我有一個'屬性'這是有位置,屬性_類型和許多其他領域也。如何在c#LINQ的兩個列表中執行'AND'操作?

我的輸入有一個位置列表,每個位置都有另一個過濾條件列表。例如: - 我的位置是 - [A,B & C]。對於每個這些地點都有另一個名單 - [公寓,土地,房屋等]。

樣品輸入數據:

A - [公寓,土地,房屋] --->表示 - 位置A和3的過濾選項

乙 - [土地,房屋]

Ç - [公寓,土地]

我需要找到位置的所有屬性與房產類型[公寓,土地,房屋]和B位置與房產類型[土地,房屋]等

我做了這樣的字典對象;

Dictionary<string,List<PropertyType>> PTypeDictionary =new Dictionary<string,List<PropertyType>>(); 

注意:屬性類型是枚舉

現在我的輸入數據是本詞典 - 鍵是位置和值Property_Types名單。

如何編寫LINQ查詢以查找這些位置中的所有屬性以及過濾property_type?

+0

LINQ到什麼地步? LINQ來對象或LINQ到實體或LINQ到SQL? –

+0

LINQ to entity。 – Shafeek

回答

1

您可以構建自定義表達式,或者將它們全部合併爲單個結果。

下面的代碼示例是示例如何使用Union完成任務。在LINQPad中測試過,它也應該在實體框架中工作。

var PTypeDictionary = new Dictionary<string, IList<PropertyType>> 
{ 
    ["A"] = new List<PropertyType> { PropertyType.Apartment, PropertyType.Land, PropertyType.House}, 
    ["B"] = new List<PropertyType> { PropertyType.Land, PropertyType.House}, 
    ["C"] = new List<PropertyType> { PropertyType.Apartment, PropertyType.Land} 
}; 

var empty = Properties.Where(x => 1==2); 
var props = PTypeDictionary.Aggregate(empty, (a, f) => a.Union(Properties.Where(p => p.Location == f.Key && f.Value.Contains(p.Type))));   
var pList = props.ToList(); 
+0

感謝您的幫助。但是,爲什麼你使用'空',這是什麼? – Shafeek

+0

您可以瞭解更多關於'Aggregate'方法[此處](https://msdn.microsoft.com/en-us/library/bb549218(v = vs.110).aspx)。聚合方法將累加器函數應用於序列上,在這種情況下是過濾器字典。 'empty'只是空的查詢開始,然後對於你的字典中的每個項目,它將'聯合'當前值到先前的值。 –

相關問題