【问题标题】:Incorrect sub-array returned from Linq从 Linq 返回的子数组不正确
【发布时间】:2013-09-09 08:15:20
【问题描述】:

为 jqGrid 准备数据我得到一个意外的子网格单元格数组。简化后的代码如下:

var result = new
{
    total = 1,
    page = 1,
    records = qstList.Count(),
    rows =  qstList.Select(( c, i ) => new
            {
                Id = c.QuestionId,
                Text = c.Text,
                Type = c.Type,
                Points = c.Points,
                Ordinal = c.Ordinal,
                subgrid = new
                {
                    subtotal = 1,
                    subpage = 1,
                    cell = qstList.Where(
                              q => q.QuestionId == c.QuestionId).Select(
                              q => q.Answers).Select((d, j) => new
                              {
                                  Id = d.Select(a => a.AnswerId),
                                  Text = d.Select(a => a.Text),
                                  Correctness = d.Select(a => a.Correctness),
                                  Ordinal = d.Select(a => a.Ordinal)
                              }).ToArray()
                }
            }).ToArray()
};

行很好,但子网格的单元格数组是奇数。我期待的是:

{[Id, Text, Correctness, Ordinal], ..., [Id, Text, Correctness, Ordinal]}

但事实证明:

{[Id, Id, ...], ..., [Ordinal, Ordinal, ...]}

如何获得预期的“布局”。感谢您的帮助!

【问题讨论】:

  • 我可以通过添加 .First() 来获得预期的“布局”。所以 Id = d.Select(a => a.AnswerId).First()。仍然是为什么我需要它用于单元格而不是行的问题。
  • 对于单元格,您有 IEnumerable> - 双序列。
  • 试试...q => q.Answers).SelectMany((d, j) => d.Select(a => new { Id = a.AnswerId, Text = a.Text, ... })).ToArray()

标签: c# linq jqgrid


【解决方案1】:

这将引导您找到正确的答案:

  • 为所有匿名类(Row、Subgrid、Cel 等)创建普通类
  • 重构所有代码,使一行中只有一条 Linq 语句

现在调试更容易了,您可以看到所有 Linq 语句的每个子结果。我非常有信心您会通过这种方式找到正确的答案。 (如果没有,只需将单个 Linq 语句添加到您的帖子中即可)。

【讨论】:

    【解决方案2】:

    @弗拉基米尔,谢谢!是的,SelectMany 可以:

    subgrid = new
    {
        subtotal = 1,
        subpage = 1,
        cell = qstList.Where(q => q.QuestionId == c.QuestionId).SelectMany(q => q.Answers).Select((d, j) => 
        new 
        {
            Id = d.AnswerId,
            Text = d.Text,
            Correctness = d.Correctness,
            Ordinal = d.Ordinal
         }).ToArray()
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多