Подзапрос кошмаров в EF - PullRequest
0 голосов
/ 18 мая 2011

Я действительно, действительно, борюсь с тем, что в противном случае должно быть простым запросом в любом другом месте, кроме LINQ (например, SQL!)

У меня есть две сущности:

Product
ProductApprover

Сущность Product имеет отношение «один ко многим» к сущности ProductApprover, например:

Product.ProductApprovers дает мне все сущности ProductApprover, относящиеся к Product.

Получение данных Product и связанных данных ProductApprover достаточно просто.при запросе по моему столбцу ProductID на моем объекте Product, поскольку связанные данные ProductApprover автоматически связываются с результатом, но моя проблема возникает, когда я хочу изменить свой запрос, запрашивая данные WITHIN моих связанных объектов ProductApprover.Я пробовал все виды с использованием функций «Где», «Содержит» и «Любой», функций и т. Д. Для выполнения подзапроса, но не могу получить желаемый результат.

Запрос, который я хочувыполнить:

SELECT * FROM Product p
INNER JOIN ProductApprover pa ON p.ProductId = pa.ProductId
WHERE p.ProductId = @id AND pa.Version = @version

Кто-нибудь может мне помочь, пожалуйста?Заранее благодарим.

Ответы [ 2 ]

1 голос
/ 18 мая 2011

Попробуйте это (я думаю, что это интерпретация вашего запроса SQL в LINQ):

int id = 123;
int version = 555;

var results = from p in context.Products 
              join pa in context.ProductApprovers 
              on p.ProductId = pa.ProductId 
              where p.ProductId equals id && pa.Version equals version
              select new { Product = p, Approver = pa };
1 голос
/ 18 мая 2011

Я подозреваю, что вы хотите что-то вроде этого:

var query = from product in db.Products
            where product.ProductId == productId
            select new { 
                Product = product,
                Approvers = product.Approvers.Where(pa => pa.Version == version)
            };

Если это не делает то, что вы хотите, не могли бы вы объяснить, где это падает?

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