【问题标题】:Filter Data in observable collection based on the columns in datatable根据数据表中的列过滤可观察集合中的数据
【发布时间】:2013-11-07 11:24:16
【问题描述】:

我有一个 ObservableCollection(如用户名、名字、姓氏、密码、地址、联系方式等字段),其中包含大量行,而且我有一个数据表(如 SNo、用户名、状态等列)它只有有限的行数。

现在我需要根据数据表中数据表中存在的用户名过滤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 等。 请给我一个过滤数据的解决方案。

【问题讨论】:

标签: c# wpf linq datatable observablecollection


【解决方案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;

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 感谢您抽空谢里登。 Settings.GetInstance().ObservableClass= new ObservableCollection&lt;IObservableClass&gt;( from item in Settings.GetInstance().ObservableClass join row in dtRecentInteractions on item.UserName equals row.UserName select item);我试过了,但是在加入时显示错误
    • 错误是我们无法在上面的查询中实现join
    • 错误实际上说什么?肯定有比这更多的信息吗?
    猜你喜欢
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多