创建一个observablecollection的筛选视图,并将其显示在列表框中

时间:2019-06-15 15:05:57

标签: c# linq ienumerable icollectionview

我有一个ObservableCollection,其中包含使用Linq来自数据库的数据。我只需要在列表框中显示该集合的特定过滤项即可。

我创建了一个ICollectionView,并将其初始化为该ObservableCollection的默认视图。然后我试图通过使用linq筛选该视图,这就是问题所在。我的“过滤器”返回一个IEnumerable,我不知道如何正确地将其强制转换为视图,以便可以在列表框中显示该视图。

ObservableCollection:

ICollectionView view = CollectionViewSource.GetDefaultView(mitarbeiterAufgabeData);

视图:

var selected = (Mitarbeiter)lb_Ma_Au_Zuweisung.SelectedItem;
view.Filter = from ma in selected.MitarbeiterAufgabe select ma.Aufgaben;

我的过滤器无法正常工作,因为它返回了IEnumerable:

CREATE TABLE [dbo].[Mitarbeiter] (
    [Id]        INT          IDENTITY (1, 1) NOT NULL,
    [Vorname]   VARCHAR (50) NOT NULL,
    [Nachname]  VARCHAR (50) NOT NULL,
    [Belastung] INT          NULL,
    PRIMARY KEY CLUSTERED ([Id] ASC)
);

CREATE TABLE [dbo].[Aufgaben] (
    [Id]           INT           IDENTITY (1, 1) NOT NULL,
    [Name]         NVARCHAR (50) NOT NULL,
    [Beschreibung] NVARCHAR (50) NOT NULL,
    [Belastung]    INT           NOT NULL,
    PRIMARY KEY CLUSTERED ([Id] ASC)
);

CREATE TABLE [dbo].[MitarbeiterAufgabe] (
    [Id]            INT IDENTITY (1, 1) NOT NULL,
    [MitarbeiterID] INT NOT NULL,
    [AufgabenID]    INT NOT NULL,
    PRIMARY KEY CLUSTERED ([Id] ASC),
    CONSTRAINT [FK_MitarbeiterID] FOREIGN KEY ([MitarbeiterID]) REFERENCES [dbo].[Mitarbeiter] ([Id]),
    CONSTRAINT [FK_AufgabenID] FOREIGN KEY ([AufgabenID]) REFERENCES [dbo].[Aufgaben] ([Id])
);

如何使我的过滤器接受IEnumerable?

编辑:添加了完整的数据结构。

var selected = (Mitarbeiter)lb_Mitarbeiter_Zuweisung.SelectedItem;
{{1}}

存储表“ Mitarbeiter”中的对象。我需要过滤器才能为我提供“ MitarbeiterAufgabe”中所有条目,其中MitarbeiterID与所选项目的ID相匹配。

1 个答案:

答案 0 :(得分:1)

该过滤器应该是检查是否要包含某项的功能

您实际上已经通过列出所有正确项的列表来自己进行所有过滤。

您的过滤器可能看起来像这样:

view.Filter = ma => selected.MitarbeiterAufgabe.Contains(ma.Aufgaben);

如果不知道确切的数据结构,就不可能在这里给出准确的答案。