c#LINQ到SQL动态where子句
我正在尝试进行动态查询,以从sql数据库中提取数据。但是如何为列表框中的每个项目实现动态where子句呢 例如:c#LINQ到SQL动态where子句,c#,sql,wpf,linq,dynamic,C#,Sql,Wpf,Linq,Dynamic,我正在尝试进行动态查询,以从sql数据库中提取数据。但是如何为列表框中的每个项目实现动态where子句呢 例如: where datumStart <= fout.Datum && datumEnd >= fout.Datum && foreach (var item in listbox.SelectedItems) { Treinen treinData = (Treinen)item; where fout.Treinen.Nam
where datumStart <= fout.Datum && datumEnd >= fout.Datum && foreach (var item in listbox.SelectedItems)
{
Treinen treinData = (Treinen)item;
where fout.Treinen.Name == treinData.Name
}
其中datumStart=fout.Datum&&foreach(列表框中的变量项。SelectedItems)
{
Treinen treinData=(Treinen)项;
其中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;
foreach(列表框中的变量项。选择编辑项)
{
Treinen treinData=(Treinen)项;
Console.WriteLine(treinData.Name);
}
DateTime datumStart=datePickerStart.SelectedDate.Value;
DateTime datumEnd=datePickerEnd.SelectedDate.Value;
ObjectQuery fouten=eventsenties.Foutens;
加载数据=
(来自fout in fouten)
其中,datumStart=四个基准
.....
根据数据和时间排序
选择新的
{
基准面=四个基准面,
时间=四点时间,
FoutCode=fout.FoutCode,
Omschrijving=fout.Omschrijving,
出纳员,
Module=fout.Module.ToUpper(),
FoutId=fout.FoutId,
TreinId=fout.TreinId
}).AsEnumerable().Select(x=>new Fouten
{
基准=x.基准,
时间=x.时间,
FoutCode=x.FoutCode,
Omschrijving=x。Omschrijving,
出纳员=x.出纳员,
模块=x.模块,
FoutId=x.FoutId,
TreinId=x.TreinId
}).ToList();
foutensDataGrid.ItemsSource=loadedData;
您可以将调用链接到.Where()
扩展方法(以及许多其他LINQ扩展方法)。因此,首先从您的集合(以及您的首字母.Where()
子句)开始:
然后,您可以继续添加剩余的子句,在得到实际枚举底层数据的内容之前,这些子句都不会对底层数据进行实际计算(例如在您的示例中为.ToList()
):
如果where子句中的属性发生更改,则需要使用表达式树,否则,如果只是更改where子句中的值,如x.Name=“Bob”或x.Name=“Goostrabha”,则可以使用表达式,并将表达式作为谓词传递到where。您还可以在查询中添加多个“where”子句,每个where子句表示“&&”。例如,'var query=select x where cluase1 where clause2'这个动态where子句应该计算什么?
var foutens = eventsEntities.Foutens
.Where(f => datumStart <= f.Datum && datumEnd >= f.Datum);
foreach (var item in listbox.SelectedItems)
{
Treinen treinData = (Treinen)item;
foutens = foutens.Where(f => f.Treinen.Name == treinData.Name);
}
loadedData = foutens.Select(f => new
{
Datum = f.Datum,
Time = f.Time,
FoutCode = f.FoutCode,
Omschrijving = f.Omschrijving,
Teller = f.Teller,
Module = f.Module.ToUpper(),
FoutId = f.FoutId,
TreinId = f.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();