我正在搜索一个sql server数据库,显然它返回的数量超过了应用程序可以处理的数量。我正在回到许多结果的路上,我需要尽量减少发回的记录数量,然后告诉用户他们选择了太多。
这就是我所拥有的:
private List<Log> SearchLog()
{
try
{
using (var model = new SuburbanPortalEntities())
{
var qry = from logs in model.Logs
where logs.LogDateTime > dateTimePicker_Start.Value &&
logs.LogDateTime < dateTimePicker_End.Value
select logs;
Guid tokenid;
if (Guid.TryParse(textBox_TokenId.Text, out tokenid))
{
qry = qry.Where(x => x.TokenId == tokenid);
}
if (!string.IsNullOrEmpty(textBox_SessionId.Text))
{
qry = qry.Where(x => x.SessionId == textBox_SessionId.Text.ToLower());
}
if (!string.IsNullOrWhiteSpace(textBox_Contains.Text))
{
qry = qry.Where(x => x.Message.Contains(textBox_Contains.Text));
}
if (checkedListBox_DisplayFilter.GetItemChecked(0))
{
qry = qry.Where(x => x.IsWarning);
}
if (checkedListBox_DisplayFilter.GetItemChecked(1))
{
qry = qry.Where(x => x.IsException);
}
var sourceEnumList = new List<string>();
if (checkBox_WebPortal.Checked)
{
sourceEnumList.Add("WebPortal");
}
if (checkBox_SubService.Checked)
{
sourceEnumList.Add("SubService");
}
if (checkBox_TruckRouting.Checked)
{
sourceEnumList.Add("TruckRouting");
}
if (checkBox_SuburbanHub.Checked)
{
sourceEnumList.Add("SuburbanHub");
}
if (sourceEnumList.Any())
{
qry = qry.Where(x => sourceEnumList.Contains(x.SourceEnum));
}
qry = qry.OrderByDescending(x => x.LogDateTime);
return qry.ToList();
}
}
catch (Exception ex)
{
MessageBox.Show("Error: " + ex.Message);
return null;
}
}
如何获取最新的100条记录并知道告诉用户他们需要优化搜索?
谢谢!
答案 0 :(得分:9)
您可以使用Take
方法
return qry.Take(100).ToList();
如果你不按降序对记录进行排序,这将给你前100条记录。但是我看到你已经做了排序,所以这应该给你正确的结果。无论如何,如果你想删除OrderBy
这里是一行版本,以避免混淆:
return qry.OrderByDescending(x => x.LogDateTime).Take(100).ToList();
答案 1 :(得分:2)
只需更改排序并获取前100个。
qry = qry.OrderBy(x => x.LogDateTime).Take(100).OrderByDescending(x => x.LogDateTime).ToList();
更新:
我认为这个问题是如何措辞引起的。您真正需要的是:qry.Take(100).ToList();
(并且不要更改排序顺序)
+1 @ Selman22
答案 2 :(得分:0)
使用
.Take()
限制返回的行数。这与
一起.Skip()
允许您分页结果。
在使用Skip和Take之前我强烈建议你使用.Order()命令确保按照你想要的顺序获取记录。
如果您想知道是否有100多条记录使用。请(101)查看您是否收到超过100条记录
int page = 0;
int pageSize = 100
var result = dataset.OrderBy( x=> x.somecolumn ).Skip(page * 100).Take(pageSize + 1);
if(result.Count()>pageSize + 1)
// there are more records than we can display