LINQ to Entities - предложение where..in с несколькими столбцами - PullRequest
19 голосов
/ 02 августа 2011

Я пытаюсь запросить данные формы с помощью LINQ-to-EF:

class Location {
    string Country;
    string City;
    string Address;
    …
}

путем поиска местоположения по кортежу (Страна, Город, Адрес). Я пытался

var keys = new[] {
    new {Country=…, City=…, Address=…},
    …
}

var result = from loc in Location
             where keys.Contains(new {
                 Country=loc.Country, 
                 City=loc.City, 
                 Address=loc.Address
             }

но LINQ не хочет принимать анонимный тип (который, как я понимаю, является способом выражения кортежей в LINQ) в качестве параметра для Contains ().

Есть ли "хороший" способ выразить это в LINQ, при этом имея возможность выполнять запрос к базе данных? С другой стороны, если бы я просто перебрал ключи и Union () - отредактировал запросы, это было бы плохо для производительности?

Ответы [ 11 ]

0 голосов
/ 02 августа 2011

Я не думаю, что это сработает для вас, поскольку, когда вы обновляете объект в методе Contains, он каждый раз создает новый объект. Поскольку эти объекты являются анонимными, их сравнение будет сравниваться с их ссылкой, которая будет отличаться для каждого объекта.

Кроме того, посмотрите на ответ Яцека.

...