需要linq查询才能返回最后100个结果

Ero*_*ocM 3 c# linq entity-framework

我正在搜索一个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;
  }
}
Run Code Online (Sandbox Code Playgroud)

如何获取最新的100条记录,并告诉用户他们需要优化搜索?

谢谢!

Sel*_*enç 9

你可以使用Take方法

return qry.Take(100).ToList();
Run Code Online (Sandbox Code Playgroud)

如果你没有按降序对记录进行排序,这将给你前100条记录.但是我看到你已经做了排序,所以这应该给你正确的结果.不管怎样,如果你想删除OrderBy这里是一行版本以避免混淆:

return qry.OrderByDescending(x => x.LogDateTime).Take(100).ToList();
Run Code Online (Sandbox Code Playgroud)