从LINQ到Objects的Enumerable.GroupBy是否保留组中元素的顺序?
如何将行号投影到linq查询结果集上.
而不是说:
field1,field2,field3
field1,field2,field3
我想要:
1,field1,field2,field3
2,field1,field2,field3
以下是我对此的尝试:
public List<ScoreWithRank> GetHighScoresWithRank(string gameId, int count)
{
Guid guid = new Guid(gameId);
using (PPGEntities entities = new PPGEntities())
{
int i = 1;
var query = from s in entities.Scores
where s.Game.Id == guid
orderby s.PlayerScore descending
select new ScoreWithRank()
{
Rank=i++,
PlayerName = s.PlayerName,
PlayerScore = s.PlayerScore
};
return query.ToList<ScoreWithRank>();
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,"Rank = i ++"行引发了以下编译时异常:
"表达式树可能不包含赋值运算符"
我被这个简单的数据问题困扰了.
我正在使用Entity框架并拥有一个产品数据库.我的结果页面返回这些产品的分页列表.现在我的结果按每个产品的销售数量排序,所以我的代码如下所示:
return Products.OrderByDescending(u => u.Sales.Count());
Run Code Online (Sandbox Code Playgroud)
这将返回我的实体的IQueryable数据集,按销售数量排序.
我希望我的结果页面显示每个产品的排名(在数据集中).我的结果应如下所示:
Page #1
1. Bananas
2. Apples
3. Coffee
Page #2
4. Cookies
5. Ice Cream
6. Lettuce
Run Code Online (Sandbox Code Playgroud)
我希望我只想在结果中使用SQL ROW_NUMBER变量添加一列...但我不知道如何将此列添加到我的结果数据表中.
我的结果页面确实包含一个foreach循环,但由于我使用的是分页集,我猜测使用该数字来伪造排名数字不是最好的方法.
所以我的问题是,在这种情况下,如何在查询结果中添加ROW_NUMBER列?
我正在使用T4为LINQ to Entities实体生成存储库.
存储库包含(除其他外)适合于分页的List方法.支持和不支持的方法的文档没有提到它,但是你不能Skip在无序上"调用" IQueryable.它会引发以下异常:
System.NotSupportedException:方法'Skip'仅支持LINQ to Entities中的排序输入.必须在方法'Skip'之前调用'OrderBy'方法.
我通过允许通过部分方法定义默认排序来解决它.但是我在检查表达式树是否确实包含一个问题时遇到了问题OrderBy.
我已将问题减少到尽可能少的代码:
public partial class Repository
{
partial void ProvideDefaultSorting(ref IQueryable<Category> currentQuery);
public IQueryable<Category> List(int startIndex, int count)
{
IQueryable<Category> query = List();
ProvideDefaultSorting(ref query);
if (!IsSorted(query))
{
query = query.OrderBy(c => c.CategoryID);
}
return query.Skip(startIndex).Take(count);
}
public IQueryable<Category> List(string sortExpression, int startIndex, int count)
{
return List(sortExpression).Skip(startIndex).Take(count);
}
public IQueryable<Category> List(string sortExpression)
{
return AddSortingToTheExpressionTree(List(), sortExpression);
}
public IQueryable<Category> List()
{
NorthwindEntities ent = …Run Code Online (Sandbox Code Playgroud) 这是我的第一个问题.我从数据库中获取了一个下拉列表的不同值列表,如下所示:
var plocQ = (from m in db.SERVICE_NRS
orderby m.PLOC
select new { PlocID = m.PLOC, value = m.PLOC }).Distinct();
Run Code Online (Sandbox Code Playgroud)
排序似乎没有效果,我必须这样做:
var plocQ = (from m in db.SERVICE_NRS
select new { PlocID = m.PLOC, value = m.PLOC }).Distinct();
plocQ = from s in plocQ
orderby s.PlocID
select s;
Run Code Online (Sandbox Code Playgroud)
我想知道这是否与LINQ或数据库有关?我对LINQ有点新,之前写过太多的SQL.有任何想法吗?
假设我有一个带有DateTime字段和int字段的表,并执行如下查询:
var query = context.tblSomeTable.Where(s=>s.Name == "Hello World").OrderBy(s=>s.SignUpDate);
Run Code Online (Sandbox Code Playgroud)
如果我随后用结果执行两个子查询,它们是否仍按日期排序?:
var sub1 = query.Where(s=>s.Id = 5);
var sub2 = query.Where(s=>s.Id = 8);
Run Code Online (Sandbox Code Playgroud)
我的直觉说它们仍处于有序状态,但是如果原始查询已被迭代/执行了,这是否重要?
linq ×6
c# ×3
.net ×2
asp.net ×1
generics ×1
group-by ×1
linq-to-sql ×1
row-number ×1
sorting ×1