根据datatable中的列过滤可观察集合中的数据

时间:2013-10-28 15:38:13

标签: c# wpf linq datatable observablecollection

我有一个ObservableCollection(像用户名,名字,姓氏,密码,地址,联系人等等字段),其中包含一大堆行,而且我还有一个数据表(像SNo,用户名, status)只有有限的行数。

现在我需要根据数据表中数据表中的用户名过滤ObservableCollection,并使用linq将ObservableCollection绑定到数据网格。 我做了一个样本linq查询它不会产生确切的数据。

 var res = from a in Settings.GetInstance().ObservableClass 
           where dtStatusTable.Rows.Contains(a.UserName)
           select a;
 Settings.GetInstance().ObservableClass = res as ObservableCollection<IObservableClass >;

注意:UserName是唯一的,可能包含相似但不完全相同的内容。就像用户名可能像Manikandan,Mani,ManikandanSekar等。 请给我一个过滤数据的解决方案。

2 个答案:

答案 0 :(得分:1)

您当前的查询显示“数据表中有一行a.UserName”,当您听起来希望查询说“数据表的某一行包含特定列中的.UserName”时。你可以通过做这样的事情来使这一点更清楚(不确定你的确切类型是什么,所以这只是一些伪问题):

var usernamesInDataTable = dtStatusTable.Rows.Select(r => r.UserName);

var query = from a in ObservableClass
            where userNamesInDataTable.Contains(a.UserName)
            select a;

答案 1 :(得分:0)

也许您可以执行以下操作,选择与username完全匹配的项目:

YourObservableCollection = new ObservableCollection<YourDataType>(
    from item in YourObservableCollection 
    join row in YourDataTable on item.username equals row.username
    select item);

在没有数据和智能感知的情况下编写LinQ查询有点棘手,所以如果有错误,请原谅我。