2013-10-28 39 views
0

我有一个ObservableCollection(字段如用户名,名字,姓氏,密码,地址,联系电话等),其中包含一大组行,并且我有一个数据表(诸如SNo,用户名,状态之类的列),其仅具有有限数量的行。根据数据表中的列过滤可观察集合中的数据

现在我需要根据数据表中数据表中存在的用户名过滤ObservableCollection,并使用linq将ObservableCollection绑定到datagrid。 我做了一个示例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,玛尼,ManikandanSekar等 请给我一个解决方案来过滤数据。

+0

http://stackoverflow.com/questions/11961059/check -if-string-exists-in-datatable –

+0

感谢您的快速回复eran otzap,但它正在搜索一个特定字符串的表格,而我需要的是基于一个小集动态使用linq过滤一个巨大的集合 –

回答

1

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

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

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

也许你可以做这样的事情应该具有的username完全匹配选择项目:

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

这是一种棘手的写作LinQ查询,而数据和智能感知,所以请原谅我是否有错误它。

+0

谢谢为你的时间谢里登。 'Settings.GetInstance()ObservableClass =新的ObservableCollection ( 从项目中Settings.GetInstance()ObservableClass 加入dtRecentInteractions行 上item.UserName等于row.UserName 选择项。);'我试过,但它显示加入的错误 –

+0

什么是错误? – Sheridan

+0

错误是我们不能在上面的查询中实现连接 –

相关问题