使用List <t> </t>使用LINQ排序代码编译错误

时间:2013-01-21 17:30:31

标签: c# linq

编译错误: “当前上下文中不存在名称'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}

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

3 个答案:

答案 0 :(得分:3)

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

你想要的更像是这样:

var result = list.OrderBy(x => x.Position).ThenBy(x => x.Value);

答案 1 :(得分:1)

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

var query =
    from b in list
    orderby b.Position, b.Value
    select b;

答案 2 :(得分:0)

您已将b用于群组g,因此现在使用g。在分组到g。

之前,您还必须通过b进行排序
var resultList = from b in list orderby b.Value group b by b.Position into g select g;