LINQ - 查询排名前5位

时间:2010-06-29 16:29:29

标签: vb.net linq

如何使用linq返回排名前5的前五名?

Dim Top5 = From A In DAO.Cache.Select(Of VO.Empresa).Take(5) Select A.Nome

我想要这个结果:

Rank  Name
1     "Example Name"
2     "Example Name"
3     "Example Name"
4     "Example Name"
5     "Example Name"

3 个答案:

答案 0 :(得分:4)

您需要使用提供索引的Select overload

Dim Top5 = DAO.Cache.Take(5).Select(Function(A, Index) New With { .Rank = Index, .Name = A.Nome })

(我保留了属性拼写.Nome - 虽然我怀疑它可能需要.Name

答案 1 :(得分:1)

If grdDetail.RowCount < 10 Then

    grdDetail.CurrentRow.Cells(OrderNo.Name).Value = "00" & grdDetail.RowCount

ElseIf grdDetail.RowCount > 10 And grdDetail.RowCount < 100 Then

    grdDetail.CurrentRow.Cells(OrderNo.Name).Value = "0" & grdDetail.RowCount

Else

    grdDetail.CurrentRow.Cells(OrderNo.Name).Value = grdDetail.RowCount

End If

答案 2 :(得分:0)

我不完全确定我完全理解你的问题:但是我假设你想订购你的清单以Rank - 升序排序前五名?

您可以使用内置的LINQ排序语法轻松完成此操作:

VB: Dim Top5 = From o in objects Order By o.Rank Ascending Select o

C#:var top5 = from o in objects orderby o.Rank ascending select o

(在这种情况下类似于令人惊讶的 / giggle

例如,您可以执行以下操作:

C#:

void Main()
{
    List<MyObject> objs = new List<MyObject>();
    objs.Add(new MyObject{ Rank = 1, Message = "NUMBER ONE"});
    objs.Add(new MyObject{ Rank = 3, Message = "NUMBER THREE"});
    objs.Add(new MyObject{ Rank = 5, Message = "NUMBER FIVE"});
    objs.Add(new MyObject{ Rank = 4, Message = "NUMBER FOUR"});
    objs.Add(new MyObject{ Rank = 2, Message = "NUMBER TWO"});

    var sortedobjs = from o in objs
                     orderby o.Rank ascending
                     select o;
    Console.WriteLine(sortedobjs.ToList());
}

public class MyObject
{
    public int Rank {get; set;}
    public string Message {get; set;}
}

哪会吐出来:

Rank  Message
1     NUMBER ONE
2     NUMBER TWO
3     NUMBER THREE
4     NUMBER FOUR
5     NUMBER FIVE

HTH。