如何在c#LINQ的两个列表中执行'AND'操作?
我有一个'属性'这是有位置,属性_类型和许多其他领域也。如何在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?
您可以构建自定义表达式,或者将它们全部合并为单个结果。
下面的代码示例是示例如何使用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();
感谢您的帮助。但是,为什么你使用'空',这是什么? – Shafeek
您可以了解更多关于'Aggregate'方法[此处](https://msdn.microsoft.com/en-us/library/bb549218(v = vs.110).aspx)。聚合方法将累加器函数应用于序列上,在这种情况下是过滤器字典。 'empty'只是空的查询开始,然后对于你的字典中的每个项目,它将'联合'当前值到先前的值。 –
LINQ到什么地步? LINQ来对象或LINQ到实体或LINQ到SQL? –
LINQ to entity。 – Shafeek