EF4 Как создать запрос с динамическим выбором и оператором where - PullRequest
1 голос
/ 22 сентября 2011

Я пытаюсь создать своего рода динамический загрузчик для своих моделей, где я могу указать, какие свойства мне нужны, главное назначение - создать REST API, который предоставляет динамическую информацию как JSON для отдельных моделей.

К API будет обращаться, например, /api/model?id=581D1393-3436-4146-A397-E47CF5419453&fields=foo,bar,baz

. Для этой цели я использовал Dynamic LINQ, как описано в Блог Скотта проблема в том, что мне нужно выполнять запросы к нескольким таблицам с объединениями и загружать данные из разных таблиц, что я не могу сделать в этом случае, насколько я знаю.

Теперь я использую ObjectQuery<DbDataRecord> подходс Entity SQL, где я могу создать запрос так, как я хочу, но в этом случае я теряю проверку компилятора, и его сложнее реорганизовать.

Мой вопрос: есть ли сценарий наилучшей практики для такого рода проблем?И разве может быть проще добиться с каким-то другим ORM?

Привет

Руслан А.

1 Ответ

0 голосов
/ 25 сентября 2011

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

using(var someContext = new SomeContextEntities())
{
    var data = someContext.Entity;

    foreach(var kvp in queries)
    {
        switch(kvp.Key)
        {
            case "q1":
                var val = kvp[kvp.Key];
                data = data.Where(q => q.q1 == val);
                break;
            case "q2":
                var val2 = kvp[kvp.Key];
                data = data.Where(q => q.q2 == val2);
                break;
            case "q3":
                var val3 = kvp[kvp.Key];
                data = data.Where(q => q.q1.q3 == val3);
            ...
        }
    }
    return data.ToList();
}

Если вы посмотрите на сгенерированный скрипт или набор результатов, вы получите то, что вы хотите.

...