c#LINQ到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

我正在尝试进行动态查询,以从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
}
其中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();