所以我正在执行 linq-to-sql 查询,结果以 IEnumerable 形式出现。从此列表中,我为返回的每个结果创建一个新对象。我已经使用的存储过程正在按我想要的顺序返回对象。我们有一个排行榜,查询后结果按降序排列。我遇到问题的部分是我想将排名添加到新对象的新属性中。
说我有这个代码
var usersSummary = Context.[myStoredProcedure]
return usersSummary.Select(x => new [myObject]
{
UserId = x.UserID,
FirstName = x.FirstName,
LastName = x.LastName,
TotalPoints = x.TotalPoints,
LeaderBoardRank = //this part here
Email = x.Email,
CreatedDate = x.CreatedDate
}).OrderByDescending(x => x.TotalPoints).ToList();
我想要LeaderBoardRank
来作为他们的排名。它们已经按排名顺序排序,因此第一个对象将是 1 ,下一个对象是 2 ,依此类推。由于这不是正常的 C# 循环,我不太确定如何用排名填充此属性。
Select
作为您可以使用的索引的重载。
var usersSummary = Context.[myStoredProcedure]
return usersSummary.Select((x, i) => new [myObject]
{
UserId = x.UserID,
FirstName = x.FirstName,
LastName = x.LastName,
TotalPoints = x.TotalPoints,
LeaderBoardRank = i
Email = x.Email,
CreatedDate = x.CreatedDate
}).OrderByDescending(x => x.TotalPoints).ToList();
您正在创建的对象是否已经是列表中的对象?在这种情况下,您不必创建新对象,只需将值分配给现有对象即可:
var usersSummary = Context.[myStoredProcedure]
return usersSummary.Select((x, i) =>
{
x.LeaderBoardRank = i;
return x;
}).OrderByDescending(x => x.TotalPoints).ToList();
此外,如果您的清单已订购,则无需再次订购。您的 select 语句不会更改顺序。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)