Создайте отфильтрованное представление наблюдаемой коллекции и отобразите его в списке - PullRequest
2 голосов
/ 15 июня 2019

У меня есть ObservableCollection, которая содержит данные из базы данных, используя Linq.Мне нужно, чтобы в моем списке отображались только определенные отфильтрованные элементы этой коллекции.

Я создал ICollectionView, который я инициализировал как представление по умолчанию из этого ObservableCollection.Затем я пытаюсь отфильтровать это представление с помощью linq, и в этом заключается проблема.Мой «фильтр» возвращает IEnumerable, и я не знаю, как правильно привести его к моему представлению, чтобы я мог показать представление в моем списке.

The ObservableCollection:

private ObservableMitarbeiterAufgabe mitarbeiterAufgabeData;

Представление:

ICollectionView view = CollectionViewSource.GetDefaultView(mitarbeiterAufgabeData);

Мой фильтр не работает, потому что он возвращает IEnumerable:

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])
);
var selected = (Mitarbeiter)lb_Mitarbeiter_Zuweisung.SelectedItem;

сохраняет объект из таблицы 'Mitarbeiter'.Мне нужен фильтр, чтобы дать мне каждую запись из 'MitarbeiterAufgabe', где MitarbeiterID совпадает с идентификатором выбранного элемента.

1 Ответ

1 голос
/ 15 июня 2019

Предполагается, что фильтр - это функция, которая проверяет, должен ли элемент быть включен или нет.

Вы фактически уже выполняете всю фильтрацию самостоятельно, придя к списку всех правильных элементов.

ваш фильтр может выглядеть примерно так:

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

, не зная точных структур данных, здесь невозможно дать точный ответ ..

...