我的代码可以正常工作,但是我试图找出如何优化它和/或通过将其更改为一行来加快速度,因为它目前每个循环执行一次数据库表查询,这似乎是永远拿下
自定义类和sql表都具有与您可以看到的完全相同的名称。 queryList是自定义类的列表。
foreach (var item in queryList)
{
var query = context.DataTable.Where(i => i.ValueName == item.ValueName && i.Symbol == symbol && i.Days == item.Days).ToList();
if (query.Count() > 0)
{
context.DataTable.RemoveRange(query);
}
}
答案 0 :(得分:2)
您可以在queryList
:
Where
的成员
var query = context.DataTable.Where(i => i.Symbol == symbol && queryList.Any(item => i.ValueName == item.ValueName && i.Days == item.Days)).ToList();
答案 1 :(得分:0)
如果您的queryList
不是一个巨大的列表,这可能会有效:
我认为symbol
应该是item.Symbol
。如果是这种情况,请试试这个:
var items = queryList
.Select(item => item.ValueName + "," + item.Symbol + "," + item.Days.ToString())
.ToList();
var query = context.DataTable
.Where(i => items.Contains(i.ValueName + "," + i.Symbol + "," + i.Days.ToString());
我们的想法是构建一个LINQ to SQL可以转换为WHERE x IN (str1, str2, str3)
子句的字符串列表。
答案 2 :(得分:0)
您可以使用Union
一次获取数据库中的所有数据:
var query = context.DataTable.Where(x => x.Id == 0);
foreach (var item in queryList)
query = query.Union(context.DataTable.Where(i => i.ValueName == item.ValueName && i.Symbol == symbol && i.Days == item.Days));
var allData = query.ToList();
if (allData.Count() > 0)
context.DataTable.RemoveRange(allData);