如何表现' AND'在c#LINQ的两个列表中操作?

时间:2016-11-08 05:25:53

标签: c# linq dictionary

我有一张桌子' 物业'它有位置 Property_Type 以及许多其他字段。

我的输入有一个位置列表,每个位置都有另一个过滤条件列表。例如: - 我的位置是 - [A,B& C]。对于这些地点中的每一个,还有另一个列表,即 - [公寓,土地,房屋等]。

示例输入数据:

A - [公寓,土地,房屋] --->表示 - 具有3个过滤选项的位置A

B - [土地,房屋]

C - [公寓,土地]

我需要找到位置A的所有属性,包括property_type [Apartment,Land,House],在位置B找到property_type [Land,House]等

我像这样制作了字典对象;

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

注意:PropertyType为枚举

现在我的输入数据在此词典中 - 键是位置,值是Property_Types的列表。

如何编写LINQ查询以查找这些位置中的所有属性以及过滤property_type?

1 个答案:

答案 0 :(得分:1)

您可以构建自定义表达式,或者只是将所有这些表达式合并为单个结果。

下面的代码示例是如何使用Union执行任务的示例。在LINQPad中测试过,它也应该在Entity Framework中工作。

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();