0

我想使用过滤数据表中的数据linq

我的场景是我有一个元素数组,其中包含动态创建的日期,并且在数据表中我们有列id,date,etc.

我们必须检索包含数组中所有日期的 id

前任:

string[] arr={"10/10/2012","11/11/2012","9/9/2012"}

桌子 :

ID   date      
1    10/10/2012         
2    11/11/2012        
1    9/9/2012         
6    9/9/2012         
3    9/9/2012         
6    11/11/2012         
1    11/11/2012        

输出将为 1 - 因为只有 id '1' 具有所有数组元素。

为了完成上述功能,我使用了如下所示的 Linq 查询。但我确实失败了。

Dim volunteers As DataTable =
    (From leftTable In dtavailableVolunteers.AsEnumerable()
    Join rightTable In dtavailableVolunteers.AsEnumerable()
        On leftTable.VolunteerId Equals rightTable.VolunteerId
    Where SelectedDatesArray.All(Function(i) rightTable.Field(Of String)("SelectedDate").Equals(i.ToString()))
    Select rightTable).CopyToDataTable()
4

3 回答 3

0

假设您的数据表是 dt

DataRow[] dr = dt.Select("date in (" + string.join("," , arr) + ")");

string[] st = dr.Select(ss => ss["id"].ToString()).ToArray();

或者

DataTable newdt = dr.CopyToDataTable();

第二行是 LINQ

于 2012-04-13T13:30:39.080 回答
0

这是另一个版本:

from volunteer in dtavailableVolunteers
group volunteer by volunteer.Id into g
let volunteerDates = g.Select(groupedElement=>groupedElement.date)
where arr.All(date=>volunteerDates.Contains(date))
select g.Key
于 2012-04-14T07:30:03.393 回答
0

您可以按 ID 对行进行分组,然后找到以下组:不存在组日期不包含该元素的 arr 元素。我的意思是:

var result = from item in list
             group item by item.ID into grouping
             where !arr.Exists(date => 
                 !grouping.Select(x => x.Date).Contains(date))
             select grouping.Key;
于 2012-04-14T05:55:38.727 回答