我需要把ColorModel发到网页上,每Shoe个才能找到Stock个.我想要一份ColorModel强的子元素名单,但不知道怎么做. 下面是表类和模型类:

public class ColorModel
{
    public int ShoeId { get; set; }
    public int ColorId { get; set; }
    public string? ColorName { get; set; } = null!;

    public List<SizeModel> Sizes { get; set; }
}

public class SizeModel
{
    public int? SizeId { get; set; }
    public float? SizeValue { get; set; }
    public int? Stock { get; set; }
}
public partial class ShoeVariant
{
    public int ShoeVariantId { get; set; }
    public int ShoeId { get; set; }
    public int ColorId { get; set; }
    public int SizeId { get; set; }
    public int Stock { get; set; }
    public virtual Color Color { get; set; } = null!;
    public virtual Shoe Shoe { get; set; } = null!;
    public virtual Size Size { get; set; } = null!;
}

public partial class Shoe
{
    public int ShoeId { get; set; }
    public string ShoeName { get; set; } = null!;
}

public partial class Size
{
    public int SizeId { get; set; }
    public float SizeValue { get; set; }
    public virtual ICollection<ShoeVariant> ShoeVariants { get; set; } = new List<ShoeVariant>();
}
var result = (
    from sv in _context.ShoeVariants
    join s in _context.Shoes on sv.ShoeId equals s.ShoeId
    join color in _context.Colors on sv.ColorId equals color.ColorId
    join sz in _context.Sizes on sv.SizeId equals sz.SizeId
    group sv by new {s.ShoeId, color.ColorId, color.ColorName} into g
    select new ColorModel
    {
        ShoeId = g.Key.ShoeId,
        ColorId = g.Key.ColorId,
        ColorName = g.Key.ColorName,
        Sizes = new List<SizeModel>
        {
        }
    }).ToList();

我应该 for each SizeModel单独 Select 以获取列表吗? Stock值在ShoeVariants

推荐答案

您应该在客户端判断分组.SQL没有返回分组详细信息的模拟.

var variants = _context.ShoeVariants
    .Select(sv => new 
    {
        ShoeId = sv.ShoeId,
        ColorId = sv.ColorId,
        ColorName = sv.Color.Name,

        Size = new SizeModel
        {
            SizeId = sv.SizeId,
            SizeValue = sv.Size.SizeValue,
            Stock = sv.Stock
        }
    })
    .AsEnumerable();

var result = variants
    .GroupBy(v => new { v.ShoeId, v.ColorId, v.ColorName })
    .Select(g => new ColorModel
    {
        ShoeId = g.Key.ShoeId,
        ColorId = g.Key.ColorId,
        ColorName = g.Key.ColorName,

        Sizes = g.Select(x => x.Size).ToList()
    })
    .ToList();

Csharp相关问答推荐

子组件:如何根据另一个组件的状态启用输入

将修剪声明放入LINQ中

处理. netstandard2.0项目中HttpClient.SslProtocol的PlatformNotSupportedException问题""

try 在Blazor项目中生成html

Int和uint相乘得到LONG?

Appsettings.json未加载.Net 8 Blaazor Web程序集

更改执行目录

Selify只更改第一个下拉菜单,然后忽略REST-C#

对于PowerShell中的ConvertTo-SecureString方法,Microsoft如何将初始化向量添加到AES加密中的安全字符串?

在Windows Plesk上发布ASP.NET Core 7 Web API-错误:无法加载文件或程序集';Microsoft.Data.SqlClient';

Celler ArgumentExpression是否期望在所有情况下都捕获允许空值的运算符?

如何在C#中正确类型化带有泛型的嵌套类

是否可以从IQueryable T中获取一个IdentyEntry T>

在构造函数中传递C#函数以用作EventHandler委托的订阅服务器

如何在C#.NET桌面应用程序中动态更改焦点工具上的后退 colored颜色

嵌套Blazor组件内的验证

我什么时候不应该在Dispose中调用EgSuppressFinalize(This)?

CsvHelper在第二次迭代时抛出System.ObjectDisposedException

C#Web服务转换为 node /Express不工作

从列表中跳过和获取条目的优雅方式