LINQ to Entities - ограничение включенных таблиц - PullRequest
1 голос
/ 28 июля 2010

Используя две таблицы с отношением один ко многим (например, Make -> Model), как я могу вернуть Make с ограниченным потомком Model в функцию IQueryable?

Когда я передаю «camry» как переменную, я хочу вернуть Toyota Make с только детьми, называемыми «camry», а не всеми детьми. По сути, я хочу воссоздать этот оператор SQL:

SELECT
    MakeName,
    ModelName
FROM
    Make
    LEFT OUTER JOIN Model ON Model.MakeId = Make.MakeId
WHERE
    Model.ModelName = 'camry'

Пока оператор LINQ будет выглядеть так:

return this.ObjectContext.Make
    .Include("Model")
    .Where(make => make.Model.ModelName.Equals("camry")

Это, очевидно, не является синтаксически правильным, потому что .Model в предложении Where является коллекцией сущностей и не имеет свойства .ModelName.

Как вы ограничиваете включенные таблицы? Возможно ли это в LINQ to Entities?

Ответы [ 2 ]

1 голос
/ 28 июля 2010

Заметьте, это не в моей голове, и я не стал компилировать, поэтому что-то может быть немного не так:

return this.ObjectContext.Make.Include("Model")
    .Where(make => make.Models.Any(model => model.ModelName == "camry"))

Также обратите внимание, что я думаю, что марка будет иметь "Модели", а не "Модель"

EDIT:

Я не правильно понял вопрос. Вот запрос, который вы хотите:

return this.ObjectContext.Model.Include("Make")
    .Where(model => model.ModelName == "camry")
0 голосов
/ 04 августа 2010

Это также должно работать:

from make in ctx.Makes
from model in make.Models
where model.Name == "camry"
select new 
{
   Make = make, 
   Model = model
}
...