You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LINQ中select new如何返回包含List<MarketDataEvent>集合的ViewResult对象

你当前返回平铺数据的核心原因是没有对PortfolioName进行分组聚合,只需增加分组操作即可得到期望的结构,以下是两种可行写法:

写法一:EF Core可转译的数据库端分组写法

这种写法会将分组逻辑转换为SQL在数据库侧执行,适合大数据量场景:

var portfolioresult = 
    (from port in _context.Portfolio
    join u in _context.Universe on port.CUSIP equals u.ID_CUSIP
    join m in _context.MarketDataEvent on u.ID_CUSIP equals m.CUSIP_NUMBER_REALTIME
    group m by port.Name into g
    select new ViewResult() 
    { 
        MarketDataEvents = g.ToList(), 
        PortfolioName = g.Key 
    })
    .ToList();

写法二:内存分组写法

如果遇到EF Core无法转译分组逻辑的情况,可以先查询全量关联数据,再在内存中分组,适合数据量较小的场景:

// 第一步查询所有关联的平铺数据
var rawRelationData = 
    (from port in _context.Portfolio
    join u in _context.Universe on port.CUSIP equals u.ID_CUSIP
    join m in _context.MarketDataEvent on u.ID_CUSIP equals m.CUSIP_NUMBER_REALTIME
    select new { MarketEvent = m, PortName = port.Name })
    .ToList();

// 第二步在内存中按组合名称分组聚合
var portfolioresult = rawRelationData
    .GroupBy(item => item.PortName)
    .Select(group => new ViewResult
    {
        PortfolioName = group.Key,
        MarketDataEvents = group.Select(item => item.MarketEvent).ToList()
    })
    .ToList();

注意事项

请确认你的ViewResult类定义符合要求,避免属性类型不匹配报错:

public class ViewResult
{
    // 泛型参数是MarketDataEvent,不要多写末尾的s
    public List<MarketDataEvent> MarketDataEvents { get; set; }
    public string PortfolioName { get; set; }
}

内容的提问来源于stack exchange,提问作者user2107843

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 01:06:03