var result=(from refridgerators in context.A
group refridgerators by new { refridgerators.Id, refridgerators.Name } into gr
select new DAO<String>
{
Key = gr.Key.Name,
Count = gr.Count()
}).OrderByDescending(k => k.Count).Take(numberOfRecords).ToList();
这是我的linq to sql查询,这工作得很好。
如果我传递numberOfRecords = 5,则显示前5条记录(按其计数排序)。
现在我的问题是我不想修改查询。那么我应该在上面的查询中做什么来显示所有记录。这与我的要求有关,我希望使用相同的查询来显示所有冰箱和前5名,前10名冰箱。
我不确定是否可以使用LINQ。但我猜必须有与之相关的东西。
答案 0 :(得分:5)
我只是不将Take
添加到查询中,而是添加到您使用此查询的代码中。
例如:
public static IEnumerable<DAO> GetRefrigerators()
{
var query = from refridgerators in context.A
group refridgerators by new { refridgerators.Id, refridgerators.Name } into gr
select new DAO<String>
{
Key = gr.Key.Name,
Count = gr.Count()
};
return query.OrderByDescending(k => k.Count);
}
现在您可以使用:
var refrigerators = GetRefrigerators().Take(5).ToList();
或
var refrigerators = GetRefrigerators().Take(10).ToList();
或
var refrigerators = GetRefrigerators().ToList();
答案 1 :(得分:4)
我将numberOfRecords设为int?
,如果值为null,则不应拨打Take(numberOfRecords)
var result = (from refridgerators in context.A
group refridgerators by new { refridgerators.Id, refridgerators.Name } into gr
select new DAO<String>
{
Key = gr.Key.Name,
Count = gr.Count()
}).OrderByDescending(k => k.Count);
if(numberOfRecords.HasValue)
result = result.Take(numberOfRecords.Value);
return result.ToList();
我知道它会稍微改变您的查询,但我相信这是非常可接受的,添加一个超高值的numberOfRecords
会在您的查询中添加一个无用的内容。
答案 2 :(得分:2)
由于Tim已经发布了正确的解决方案,我仍然希望您注意更简单的解决方案,如果符合您的要求。 在此查询的顶部添加一个if条件。
if(allRecordRequired)
{
numberOfRecords = 2000000;
}
保持您的查询不变。
答案 3 :(得分:1)
将大量数字传递给您的方法。这个数字等于(至少)或大于项目数量。这应该为您提供所有记录。
答案 4 :(得分:1)
所以这篇文章很老了,我知道,但是没有提供我的解决方案(也许有人希望在2年之后达到同样的目标,就像我一样):
您可以创建自己的扩展方法,该方法也适用于linq 2 sql。例如:
public static class LinqExtensions
{
public static IEnumerable<TResult> TakeIfNotNull<TResult>(this IEnumerable<TResult> source, int? count)
{
return !count.HasValue ? source : source.Take(count.Value);
}
}
这需要int?
代替int
,如果count
为null
,则返回source-enumerable,否则返回默认Take
的结果 - 方法
所以你可以这样写:
.OrderByDescending(k => k.Count).TakeIfNotNull(numberOfRecords).ToList();
如果numberOfCounts
为空,则会记录所有记录。