2016-11-08 3 views
0

У меня есть таблица «Property», который оказывает расположения, Property_Type и многие другие области также.Как выполнить операцию «И» в двух списках в C# LINQ?

У меня есть список местоположений, и у каждого местоположения есть еще один список условий фильтрации. Например: - Мои местоположения - [A, B & C]. Для каждого из этих мест есть другой список, а именно: [Квартира, Земля, Дом и т. Д.].

Пример входных данных:

A - [Апартаменты, Земля, дом] ---> означает - Расположение A 3 варианта фильтрации

B - [земля, дом]

C - [Квартира, Земля]

Мне нужно найти все свойства в местоположении с property_type [Апартаменты, Земля, дом] и в месте Б с property_type [земли, дом] и т.д.

Я сделал словарный объект таким образом;

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

Примечание: PropertyType это перечисление

Теперь мой ввод данных в этом словаре - Ключи местоположения и Значения список Property_Types.

Как написать запрос LINQ, чтобы найти все свойства в этих местах вместе с фильтром property_type?

+0

LINQ to what? LINQ для объекта или LINQ для объекта или LINQ to SQL? –

+0

LINQ для объекта. – Shafeek

ответ

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

Спасибо за помощь. Но почему вы используете «пустые» и что это такое? – Shafeek

+0

Вы можете узнать больше о методе «Агрегат» [здесь] (https://msdn.microsoft.com/en-us/library/bb549218 (v = vs.110) .aspx). Агрегатный метод применяет функцию аккумулятора по последовательности, в этом случае ваш словарь фильтра. 'empty' просто пуст, чтобы начать с него, а затем для каждого элемента в вашем словаре он будет« Union »текущим значением предыдущего значения. –

Смежные вопросы