powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / EF запрос
7 сообщений из 7, страница 1 из 1
EF запрос
    #38941479
volnikh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.
Может кто нибудь сможет помочь.
У меня есть две сущности.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
    public class Product
    {
        public Product()
        {
            this.ProductImages = new HashSet<ProductImage>();
            this.ProductParams = new HashSet<ProductParam>();
        }
        public int ID { get; set; }
        public int BrandID { get; set; }
        public int CodeProductTypeID { get; set; }
        public string SeriaNumber { get; set; }
        public string ModelNumber { get; set; }
        public decimal Price { get; set; }
        public bool AvailableInStock { get; set; }

        public virtual Brand Brand { get; set; }
        public virtual CodeProductType CodeProductType { get; set; }
        public virtual ICollection<ProductImage> ProductImages { get; set; }
        public virtual ICollection<ProductParam> ProductParams { get; set; }

    }

    public class ProductParam
    {
        public int Id { get; set; }
        public int ProductId { get; set; }
        public int CodeProductParamId { get; set; }
        public string Value { get; set; }

        public virtual Product Product { get; set; }
        public virtual CodeProductParam CodeProductParam { get; set; }
    }



как можно выбрать все Product которые содержат параметры из списка
var prodParamCritria = new List<ProductParam>()
{
new ProductParam(){CodeProductParamId =1, Value="Чёрный" },
new ProductParam(){CodeProductParamId =2, Value="Сталь"}
};


на SQL выглядеть должно приблизительно так

SELECT *
FROM Products p
WHERE EXISTS (
SELECT *
FROM ProductParams pp
WHERE pp.ProductId = p.ID
AND (pp.CodeProductParamId = 1 AND pp.[Value] = N'Чёрный')
)
AND EXISTS (
SELECT *
FROM ProductParams pp
WHERE pp.ProductId = p.ID
AND pp.CodeProductParamId = 1
AND pp.[Value] = N'Сталь'
)
...
Рейтинг: 0 / 0
EF запрос
    #38941481
volnikh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Во втором EXISTS ошибся должно быть
Код: sql
1.
AND pp.CodeProductParamId = 2
...
Рейтинг: 0 / 0
EF запрос
    #38941484
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
x => x.Any(y => y.ProductId == x.ID ...) & x.Any(...)



посмотри примеры в LinkPad-е
...
Рейтинг: 0 / 0
EF запрос
    #38941486
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
опечатка &&
...
Рейтинг: 0 / 0
EF запрос
    #38941506
volnikh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One,

проблема работе со списком
я пробовал так но выдаёт ошибку в рантайме

Additional information: Unable to create a constant value of type Models.ProductParam. Only primitive types or enumeration types are supported in this context.

Код: c#
1.
2.
3.
4.
5.
6.
7.
 
return Products.Where<Product>(
                        p => p.ProductParams.Any<ProductParam>(
                            par => prodParamCritria.Select(c=>c.CodeProductParamId).Contains(par.CodeProductParamId) &&
                                productParams.Select(c => c.Value).Contains(par.Value)
                            )
                    );
...
Рейтинг: 0 / 0
EF запрос
    #38941512
volnikh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: c#
1.
2.
3.
4.
5.
6.
return Products.Where<Product>(
                        p => p.ProductParams.Any<ProductParam>(
                            par => prodParamCritria.Select(c=>c.CodeProductParamId).Contains(par.CodeProductParamId) &&
                                prodParamCritria.Select(c => c.Value).Contains(par.Value)
                            )
                    );
...
Рейтинг: 0 / 0
EF запрос
    #38941596
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Products.Include("ProductParams")...
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / EF запрос
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]