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

Wcf 使用EF 4.1和XAML向集合添加索引(对于highscore表),wcf,windows-phone-7,entity-framework-4,Wcf,Windows Phone 7,Entity Framework 4,我有一个从WP7应用程序调用的Web服务。我在表格名称/分数中得到了高分列表。。在最左边添加第三列(即行)最简单的方法是什么 是否需要向实体添加属性?有什么办法可以吵架吗 我在下面做了这些尝试,但没有成功 [OperationContract] public List<DMHighScore> GetScores() { using (var db = new DMModelContainer()) { //

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

是否需要向实体添加属性?有什么办法可以吵架吗

我在下面做了这些尝试,但没有成功

 [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;
}

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

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

编辑:

您可以添加Rank属性并将其设置为忽略。这将使您能够使用一个简单的for循环遍历列组集合。这也不会在数据库中持久化。它在数据库中也没有任何必需的列

它确实添加了一个额外的迭代


另一种方法。这将是在生成的UI中添加列组号,而不是在用于绑定的数据集合中添加列组号。

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

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

编辑:

您可以添加Rank属性并将其设置为忽略。这将使您能够使用一个简单的for循环遍历列组集合。这也不会在数据库中持久化。它在数据库中也没有任何必需的列

它确实添加了一个额外的迭代


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

因此,假设您希望在排行榜中加载前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;
 }

因此,假设您希望在排行榜中载入前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到10。。。我将尝试你的电子列表想法,寻找一个“索引位置”,它只是从上到下有一个数字1到10。。。我将尝试你的电子列表想法,并寻找一个“索引位置”我很接近。。。你在哪里定义ScoreDto?我很难定义它,也很难让我的Web服务看到错误2'PunkouterSoftware.WCF.DMHighScoreDTO.UserName'是不可访问的,因为它的保护级别是C:\u Code\u PunkouterSoftware\PunkouterSoftware\WCF\dmhighscoredservice.svc.cs42 21 PunkouterSoftwareScoreDto应该是数据契约,并且它的所有属性都必须与getter公开还有塞特,成功了,谢谢。。。不过,使用linq投影并将其投影到一个不规则的类型不是更容易吗?虽然我想我在网络服务中做不到。。但我可以在客户端这样做,你不能使用匿名类型作为方法的返回值。。。你在哪里定义ScoreDto?我很难定义它,也很难让我的Web服务看到错误2'PunkouterSoftware.WCF.DMHighScoreDTO.UserName'是不可访问的,因为它的保护级别是C:\u Code\u PunkouterSoftware\PunkouterSoftware\WCF\dmhighscoredservice.svc.cs42 21 PunkouterSoftwareScoreDto应该是数据契约,并且它的所有属性都必须与getter公开还有塞特,成功了,谢谢。。。不过,使用linq投影并将其投影到一个不规则的类型不是更容易吗?虽然我想我在网络服务中做不到。。但我可以在客户端这样做,您不能使用匿名类型作为方法的返回值。