我有一个大表,我需要查询120万行。包含在同一个字段中。有一个字段combined_name需要使用列表进行查询。我现在只想用一个字段来检查性能,这反映在代码中。我写它的方式花了太长时间。有没有办法让我不必将表加载到内存中?
JDataClassDataContext db = new JDataClassDataContext();
var fullName = txtSearchBox0.Text.Trim();
List<string> firstName = new List<string>(txtSearchBox1.Text.Split(',').Select(x => Convert.ToString(x)).ToList());
var rows = (from c in db.defendants_ALLs.AsEnumerable()
where c.combined_name.Contains(fullName)
&& firstName.Any(n => c.combined_name.Contains(n))
select c).ToList();
dlSearch.DataSource = rows;
dlSearch.DataBind();
答案 0 :(得分:1)
你可以像这样使用它:
var rows = (from c in db.defendants_ALLs.AsEnumerable()
where c.combined_name.Contains(fullName)
&& firstName.Any(n => c.combined_name.Contains(n))
select c).OrderBy(o => o.id).Skip(amount).Take(otherAmount).ToList();
其中amount
和otherAmount
表示您希望从数据库中实际获取的记录数量。这意味着你可以在instace中只询问30条记录,而不是完整的120万条(==如果你只是做.ToList()
会发生什么)
答案 1 :(得分:1)
最好的方法是生成一个好的老式SQL查询 “SELECT字段FROM表WHERE combined_name LIKE'%fullname%'AND firstName IN('first','next',...)” 您应该看看SqlConnection和SqlCommand以及SqlDataReader。它与linq有点不同,但它更快(如果你有正确的索引)