【发布时间】:2014-09-26 14:02:06
【问题描述】:
美好的一天!
string[] keywords = toolStripTextBoxSearch.Text.Split(' ');
IQueryable<employee> query = db.employees;
foreach (string keyword in keywords)
{
query = query.Where(data => data.empName.Contains(keyword)
|| data.bank.bankCode.Contains(keyword)
|| data.bank.bankName.Contains(keyword)
|| data.department.deptName.Contains(keyword)
|| data.department.deptCode.ToString().Contains(keyword)
|| data.designation.desigText.Contains(keyword)
|| data.empBankAccount.Contains(keyword)
|| data.empBasicSalary.Value.ToString().Contains(keyword)
|| data.empIncomeTax.ToString().Contains(keyword)
|| data.empName.Contains(keyword)
|| data.empNTN.Contains(keyword)
|| data.empTicketNumber.Contains(keyword)
|| data.grade.gradeText.Contains(keyword));
}
dataGridViewEmployee.DataSource = query;
现在,如果我在文本框中写 "a b",它不会显示任何结果,而仅写“a”或“b”时,只有 gridview 会显示多个结果。
【问题讨论】:
-
您在每次迭代时都用新查询覆盖查询,最后一个关键字“b”是空字符吗?快速猜测你想要
query.Where(d => keywords.Any(kw => data.empName.Contains(kw)); -
问题是你应用的foreach关键字
AND,所以结果会是(empName.Contains("a") OR empNTN.Contains("a") ...) AND (empName.Contains("b") OR empNTN.Contains("b") ...)(因为你是循环应用Where)。 -
您能否更好地详细说明上下文以及您要完成的工作?例如,您引用了一个 gridview。您是在谈论 ASP.NET GridView 还是 winforms DataGridView。你能告诉我们一些与之相关的代码吗?
-
@Sayse 您的代码遇到异常 System.Data.Linq.dll 中发生“System.NotSupportedException”类型的未处理异常附加信息:本地序列不能在查询运算符的 LINQ to SQL 实现中使用除了包含运算符。
-
@AlexanderRyanBaggett 我正在开发 winforms 并拥有 datagridview
标签: c# sql linq foreach iqueryable