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();
}
Если вы посмотрите на сгенерированный скрипт или набор результатов, вы получите то, что хотите.