EF4 Как создать запрос с динамическим выбором и оператором where

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

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

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

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

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

Привет

Руслан А.

1 ответ

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

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

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

Другие вопросы по тегам