Коллекционные параметры с Entity Framework? - PullRequest
3 голосов
/ 26 августа 2009

В моем последнем проекте я решил использовать Entity Framework, и все шло хорошо, пока я не попытался получить данные с "где в" , я получил ошибку.

После крошечного поиска я нашел это сообщение и это сообщение .

Это то, что я пытаюсь сделать

var all = fooelements
              .Where(l=>controlsToGet
                            .Contains(l.Control.Name));

Есть ли возможность обрабатывать его с помощью лямбда-выражений или linq с помощью Entity Framework?

Спасибо

Ответы [ 2 ]

3 голосов
/ 27 августа 2009

Опираясь на предыдущий ответ, у меня есть совет, который позволяет легко сделать это здесь:

Совет 8 - Как писать запросы в стиле WHERE IN с использованием LINQ to Entities

Надеюсь, это поможет

Алекс Джеймс

Менеджер программ - Entity Framework Team

Советы по Entity Framework

1 голос
/ 26 августа 2009

Я не знаю способа генерации предложения WHERE IN с EF, но вы можете использовать деревья выражений для создания предложения WHERE, которое будет проверять каждое из ваших значений:

    Expression<Func<FooEntity, bool>> seed = l => false;
    var predicate = controlsToGet.Aggregate(seed,
        (e, c) => Expression.Lambda<Func<DataEventAttribute, bool>>(
            Expression.OrElse(
                Expression.Equal(
                    Expression.Property(
                        Expression.Property(
                            e.Parameters[0],
                            "Control"),
                        "Name"),
                    Expression.Constant(c)),
                e.Body),
            e.Parameters));

    var all = fooelements.Where(predicate);

Если вы распечатаете predicate, вы должны увидеть такое выражение:

l => ((l.Control.Name = ctrl5) || l.Control.Name = ctrl4 || ... || False )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...