我有一个从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;
}
答案 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中添加排名,而不是在用于绑定的数据集合中添加。