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();

2行目はLINQのものです

于 2012-04-13T13:30:39.080 に答える
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 に答える
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 に答える