1

编译错误:“名称'b'在当前上下文中不存在”

代码:

    List<PositionValues> list = new List<PositionValues>();
    PositionValues item1 = new PositionValues();
    item1.Position = 2;
    item1.Value = 44;
    list.Add(item1);

    PositionValues item2 = new PositionValues();
    item2.Position = 1;
    item2.Value = 33;
    list.Add(item2);


    PositionValues item3 = new PositionValues();
    item3.Position = 1;
    item3.Value = 22;
    list.Add(item3);


    var resultList = from b in list 
                     group b by b.Position into g 
                     orderby b.Value select b;

上面的代码依赖于这个结构:

public struct PositionValues
{
    /// <summary>
    /// The position.
    /// </summary>
    public int Position;

    /// <summary>
    /// The position.
    /// </summary>
    public double Value;
}

我希望得到以下排序顺序:

resultList[0] {1, 22}
resultList[1] {1, 33}
resultList[2] {2, 44}

“位置”在括号中排在第一位,“价值”排在第二位。

4

3 回答 3

3

根据您发布的预期结果,您不需要使用group by.

你想要的更像是这样的:

var result = list.OrderBy(x => x.Position).ThenBy(x => x.Value);
于 2013-01-21T17:33:33.167 回答
1

或者,如果您想要查询样式,

var query =
    from b in list
    orderby b.Position, b.Value
    select b;
于 2013-01-21T17:37:20.570 回答
0

你已经习惯b成组g,所以现在使用g。在分组到 g 之前,您还必须按 b 排序。

var resultList = from b in list orderby b.Value group b by b.Position into g select g;
于 2013-01-21T17:32:47.503 回答