【问题标题】:Adding a 3rd class in which 2 classes are subitems for linq query to end up displaying to json添加第 3 个类,其中 2 个类是 linq 查询的子项,最终显示到 json
【发布时间】:2016-03-24 20:32:25
【问题描述】:

这个问题是基于

Data in Linq query not in join is not in output to json only those that are related in 2 classes are showing up

这个答案确实可以正常工作

但是,我要添加第三类,我想将其分组为“项目”

var query = 
from d in reportData
join r in reportDefinition on d.ReportGroupId equals r.ReportGroupId into items
select new
{
    d.ReportGroupName,
    items = items.ToList(),
    d.ReportGroupId
};

新更新的 dotnetfiddle https://dotnetfiddle.net/IIBFKG

如何在 CustomReportDefinition 类中添加以显示在项目或 ReportData 中?

【问题讨论】:

  • 让我看看我是否理解这个问题。而不是 List<ReportDefinition 的项目,您希望它们是 List<CustomReportDefinition>?即将ReportDefinition 转换为CustomReportDefinition?
  • 或者你想要另一个加入,比如new { ..., items = items.ToList(), customItems = ... }
  • @IvanStoev 抱歉延迟回复,有一个会议要去。是的,第二条评论,另一个加入
  • 您的fiddle 令人困惑。您分配了List<CustomReportDefinition> customReportDefinition = new List<CustomReportDefinition>();,但从未添加到它,而是添加到reportDefinition 列表两次。这是一个错误吗?
  • @IvanStoev 所以我想知道我是否应该有一个第四类,这个新类实际上将同时包含 ReportDefinition 和 CustomReportDefinition 的集合......

标签: c# json linq


【解决方案1】:

实际上,您可以使用完全相同的模式添加任意数量的相似类:

var query = from d in reportData
            join r in reportDefinition on d.ReportGroupId equals r.ReportGroupId into items
            join cr in customReportDefinition on d.ReportGroupId equals cr.ReportGroupId into customItems
            select new
            {
                d.ReportGroupName,
                items = items.ToList(),
                customItems = customItems.ToList(),
                d.ReportGroupId
            };

更新:根据您的 cmets,您似乎想要合并 itemscustomItems。看看以下是否适合您:

var query = from d in reportData
            join r in reportDefinition on d.ReportGroupId equals r.ReportGroupId into items
            join cr in customReportDefinition on d.ReportGroupId equals cr.ReportGroupId into customItems
            select new
            {
                d.ReportGroupName,
                items = items.Select(r => new
                {
                    r.Id, r.ReportGroupNameDef, r.SortOrder, r.ReportGroupId, r.Type
                }).Concat(customItems.Select(cr => new
                {
                    cr.Id, cr.ReportGroupNameDef, cr.SortOrder, cr.ReportGroupId, cr.Type
                })).ToList(),
                d.ReportGroupId
            };

【讨论】:

  • 好的,所以我只需要“项目”,因为最终数据最终会以 JSON 格式导出到 Kendo TreeView,并且它希望在项目中定义所有子项
  • 我不理解您的最后评论。你说的是我想要的吗?
  • 啊,那应该是什么?我们可以连接结果,但需要一个通用类型。或者使用现有类型之一(例如ReportDefinition)并转换另一种 - 它们似乎具有相同的字段。
  • item = item.ToList() --> 这需要同时表示 ReportDefinition 和 CustomReportDefinition
  • 可能我误解了你对第 4 课的想法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-10
  • 2019-11-04
  • 1970-01-01
  • 2012-04-19
  • 1970-01-01
  • 2015-05-13
  • 1970-01-01
相关资源
最近更新 更多