使用EF 4.1和XAML向集合添加索引(对于高分表)

时间:2011-04-12 14:36:19

标签: wcf windows-phone-7 entity-framework-4

我有一个从WP7应用程序调用的Web服务。我得到一个表中的高分列表(名称/分数)..在最左边添加第3列的简单方法是什么?

我是否需要向实体添加属性?有没有办法获得#行?

我尝试过以下这些事情但没有成功。

 [OperationContract]
    public List<DMHighScore> GetScores()
    {
        using (var db = new DMModelContainer())
        {
            //  return db.DMHighScores.ToList();

            var collOrderedHighScoreItem = (from o in db.DMHighScores
                                            orderby o.UserScore ascending
                                            select new
                                            {
                                                o.UserName,
                                                o.UserScore
                                            }).Take(20);


            var collOrderedHighScoreItem2 = collOrderedHighScoreItem.AsEnumerable().Select((x, i) => new DMHighScoreDTO
            {
                UserName = x.UserName,
                UserScore = x.UserScore
            }).ToList();



        }


    }
  [DataContract]
public class DMHighScoreDTO
{
    int Rank;
    string UserName;
    string UserScore;
}

2 个答案:

答案 0 :(得分:3)

因此,假设您想要在排行榜中加载前100名用户,并且您希望将其排名包括在内:

[OperationContract]
public List<ScoreDto> GetTop100()
{
    // Linq to entities query
    var query = (from u from context.Users
                 order by u.Score
                 select new 
                     {
                         u.Name,
                         u.Score
                     }).Take(100);

    // Linq to objects query from working on 100 records loaded from DB
    // Select with index doesn't work in linq to entities
    var data = query.AsEnumerable().Select((x, i) => new ScoreDto
        {
            Rank = i + 1,
            Name = x.Name,
            Score = x.Score
        }).ToList();

    return data;
 }

答案 1 :(得分:1)

行号用于什么?如果这是为了订购,我建议添加一个名为Order的列,然后将列映射到您的实体。

如果需要行索引,还可以在查询上调用.ToList()并获取每个实体的索引位置。

编辑:

您可以添加Rank属性并将其设置为Ignore。这将使您能够通过简单的for循环遍历集合设置等级。这也不会保留在数据库中。它在数据库中也没有任何必需的列。

它确实添加了额外的迭代。

另一种方式去做。这将是在生成的UI中添加排名,而不是在用于绑定的数据集合中添加。