Linq: связанные объекты нулевые, почему? - PullRequest
0 голосов
/ 10 апреля 2010

У меня есть несколько связанных таблиц (сущностей). Я пытаюсь получить объекты, используя следующий linq:

ObjectQuery<Location> locations = context.Location;
ObjectQuery<ProductPrice> productPrice = context.ProductPrice;
ObjectQuery<Product> products = context.Product;
IQueryable<ProductPrice> res1 = from pp in productPrice
                    join loc in locations
                    on pp.Location equals loc
                    join prod in products
                    on pp.Product equals prod
                    where prod.Title.ToLower().IndexOf(Word.ToLower()) > -1
                    select pp;

Этот запрос возвращает 2 записи, объекты ProductPrice, которые связали объект Location и Product, но они имеют значение null, и я не могу понять, почему. Если я попытаюсь заполнить их в linq, как показано ниже:

res =
                from pp in productPrice
                join loc in locations
                on pp.Location equals loc
                join prod in products
                on pp.Product equals prod
                where prod.Title.ToLower().IndexOf(Word.ToLower()) > -1
                select new ProductPrice
                {
                    ProductPriceId = pp.ProductPriceId,
                    Product = prod
                };

У меня есть исключение: «Объект или сложный тип PBExplorerData.ProductPrice не может быть создан в запросе LINQ to Entities» Может кто-нибудь объяснить мне, что происходит и что мне нужно делать? Спасибо

1 Ответ

0 голосов
/ 10 апреля 2010

Ответ на ваш первый вопрос «Продукт и местоположение» не указан, потому что вам нужно добавить «Включить» («») в ваш запрос.

  IQueryable<ProductPrice> res1 = from pp in 
                productPrice.Include("Location").Include("Product")
                  join loc in locations
                    on pp.Location equals loc
                  join prod in products
                    on pp.Product equals prod
                  where prod.Title.ToLower().IndexOf(Word.ToLower()) > -1
                select pp;

Вторая проблема заключается в том, что EF пытается оттолкнуть ваш запрос и ProductPrice (не является сущностью), поэтому не может. Если вы хотите сделать это, преобразуйте его в анонимный тип, просто сделайте

            select new 
            {
                ProductPriceId = pp.ProductPriceId,
                Product = prod
            };

А потом

          res.ToList().ConvertAll(x=new ProductPrice () {
               ProductPriceId  = x.ProductPriceId ,
               Product  = x.Product

           });

Или вы можете сделать это другими способами, выбрав нужную вам сущность и просто заполнив руководство.

...