Wcf 使用EF 4.1和XAML向集合添加索引(对于highscore表)
我有一个从WP7应用程序调用的Web服务。我在表格名称/分数中得到了高分列表。。在最左边添加第三列(即行)最简单的方法是什么 是否需要向实体添加属性?有什么办法可以吵架吗 我在下面做了这些尝试,但没有成功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()) { //
[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投影并将其投影到一个不规则的类型不是更容易吗?虽然我想我在网络服务中做不到。。但我可以在客户端这样做,您不能使用匿名类型作为方法的返回值。