【发布时间】:2016-06-21 02:40:35
【问题描述】:
我正在尝试进行动态查询以从 sql 数据库中提取数据。但是如何为列表框中的每个项目完成动态 where 子句?
例如:
where datumStart <= fout.Datum && datumEnd >= fout.Datum && foreach (var item in listbox.SelectedItems)
{
Treinen treinData = (Treinen)item;
where fout.Treinen.Name == treinData.Name
}
因此它将 foreach 中的所有项目添加为 && where 子句。
感谢所有帮助!
源代码:
foreach (var items in _listBox.SelectedItems)
{
Treinen treinData = (Treinen)items;
Console.WriteLine(treinData.Name);
}
DateTime datumStart = datePickerStart.SelectedDate.Value;
DateTime datumEnd = datePickerEnd.SelectedDate.Value;
ObjectQuery<Fouten> fouten = eventsEntities.Foutens;
loadedData =
(from fout in fouten
where datumStart <= fout.Datum && datumEnd >= fout.Datum
.....
orderby fout.Datum, fout.Time
select new
{
Datum = fout.Datum,
Time = fout.Time,
FoutCode = fout.FoutCode,
Omschrijving = fout.Omschrijving,
Teller = fout.Teller,
Module = fout.Module.ToUpper(),
FoutId = fout.FoutId,
TreinId = fout.TreinId
}).AsEnumerable().Select(x => new Fouten
{
Datum = x.Datum,
Time = x.Time,
FoutCode = x.FoutCode,
Omschrijving = x.Omschrijving,
Teller = x.Teller,
Module = x.Module,
FoutId = x.FoutId,
TreinId = x.TreinId
}).ToList();
foutensDataGrid.ItemsSource = loadedData;
【问题讨论】:
-
如果 where 子句中的属性发生变化,您需要使用表达式树,否则如果您只是更改 where 子句中的值,例如 x.Name = "Bob,则可以使用表达式" 或 x.Name = "Goostrabha" 并将表达式作为谓词传递给 where。
-
您还可以在查询中添加多个 'where' 子句,每个 where 子句表示 '&&' 。例如,'var query= select x where cluase1 where Clause2'
-
这个动态 where 子句究竟应该评估什么?