LINQ to Entity RIA Синтаксис запроса? - PullRequest
0 голосов
/ 04 августа 2010

Я использую службы RIA с Entity Framework - у меня есть следующий оператор выбора sql:

выберите * из TaskTable t, MapTable mt, где mt.SiteID = 1 и t.EndPointID = mt.EndPointID

Как мне написать это, используя запросы методов и лямда, или любым другим способом, который я могу использовать в своих доменных службах?

Все примеры, которые я вижу, возвращают новый объект - действительно ли я должен это делать? Я думал, что это будет довольно просто, но я еще не нашел решения.

Я хочу сделать что-то вроде:

public void IQueryable<Task> GetTasksFromID(int id)
{
    return this.ObjectContext.TaskTable.Where(e => e.SiteID=id)...????
}

Ответы [ 2 ]

1 голос
/ 04 августа 2010

Если у вас есть стандартная связь между Task и Site и что Site PK называется SiteID, вам вообще не нужно join. Вы просто делаете:

public void IQueryable<Task> GetTasksFromID(int id)
{
    return this.ObjectContext.TaskTable.Where(e => e.Site.SiteID=id);
}
1 голос
/ 04 августа 2010

У вас нет , чтобы нормально поставить проекцию в конце - но похоже, что вы задействовали две таблицы. Ваш SQL-запрос возвращает все столбцы, включая столбцы из таблицы карты. Если вы хотите только задачи, они вам не нужны. Попробуйте это:

return from task in ObjectContext.TaskTable
       join map in ObjectContext.MapTable
         on task.EndPointID equals map.EndPointID
       where map.SiteID == id
       select task;

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

Вы можете написать это в точечной записи, а не как выражение запроса, но это уродливее:

return Object.ContextTable.Join(ObjectContext.MapTable
                                             .Where(map => map.SiteID = id),
                                task => task.EndPointID,
                                map => map.EndPointID,
                                (task, map) => task);

(Обратите внимание, что здесь я переместил предложение Where, так как в этом случае оно оказывается проще перед самим объединением. Вы можете сделать то же самое в запросе выражения запроса, но опять-таки это не будет хороший.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...