2016-11-08 59 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'只是空的查询开始,然后对于你的字典中的每个项目,它将'联合'当前值到先前的值。 –