查询有问题,请看一下。我的目标是:
- 我需要一个接
Products
一个Image
。 Products
有Values
一些关于产品的附加信息,如规格等。Image
并且Values
可以是null
- 想
Products
用Image
和返回所有Values
- 因为
Values
我只需要Ids
这样就可以了List<int> of Values
ProductValues
并且ImageObjects
是关系的连接表->Products
可以有很多ProductValues
也Products
可以有很多ImageObjects
但可以有一个Image
DistinctBy
来自more linq
问题我不知道如何以Values
正确的方式聚合以返回Values
每个列表Product
PS我也在使用更多的linq
var q1 = (from p in Products
join pv in ProductValues on p.ProductId equals pv.ProductId into ljpv
from pv in ljpv.DefaultIfEmpty()
select new
{
ProductId = p.ProductId,
Description = p.Description,
Name = p.Name,
Price = p.Price,
Quantity = p.Quantity,
Type = p.Type,
Values = (from v in ValueTypes
where v.ValueId == pv.ValueId
select new {
ValueId = v.ValueId
}).ToList(),
ImageObjects = (from io in ImageObjects
where io.ProductId == p.ProductId && io.IsDefault == true
select new
{
Image = io.Image,
IsDefault = io.IsDefault,
ProductId = io.ProductId
})
.ToList()
})
.DistinctBy(x=>x.Name)
.OrderBy(x=>x.Name);
q1.Dump();
回答
Values = (from tmp in ljpv select new { ValueId = tmp.ValueId}),
我知道这不是回答的地方,但是有人会对我的代码有任何建议,或者可以更清楚或更快地完成。我一直想知道如何做这个查询很长一段时间,但是当我写信给你时,我感到眼花缭乱:)
回答后@Harald Coppoolse
- 代码更快!
return context.Product.GroupJoin(
context.ProductValue,
context.ImageObject.Include(x => x.Image),
p => p.ProductId,
pv => pv.ProductId,
io => io.ProductId,
(p, pv, io) => new ProductModel
{
ProductId = p.ProductId,
Name = p.Name,
Price = p.Price,
ProductValue = pv
.Select(npv => new ProductValueModel
{
ProductId = npv.ProductId,
}).ToList(),
ImageObject = io
.Select(nio => new ImageObjectModel
{
Image = nio.Image.DtoToModel(),
IsDefault = nio.IsDefault,
ProductId = nio.ProductId
}).ToList(),
});