0

我有一个大表,大约有 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();
4

2 回答 2

1

查看Skip()Take()方法。

你可以像这样使用它:

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();

在哪里amountotherAmount表示您要从数据库中实际获取的记录数量。这意味着您只能请求 30 条记录,而不是全部 120 万条记录(== 如果您只做 a 会发生什么.ToList()

于 2012-10-07T18:24:51.547 回答
1

最好的方法是生成一个好的老式 SQL 查询,例如“SELECT fields FROM table WHERE combine_name LIKE '%fullname%' AND firstName IN ('first', 'next',...)”你应该看看 SqlConnection和 SqlCommand 和 SqlDataReader。它与 linq 稍有不同,但速度更快(如果您有正确的索引)

于 2012-10-07T18:32:18.760 回答