Создайте отфильтрованное представление наблюдаемой коллекции и отобразите его в списке.

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

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

Наблюдаемая коллекция:

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;

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


person hypestar    schedule 15.06.2019    source источник


Ответы (1)


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

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

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

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

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

person trykyn    schedule 15.06.2019
comment
я добавил полную структуру данных и попытался более подробно объяснить, чего я пытаюсь достичь, поскольку я не могу найти правильное выражение, используя лямбда. - person hypestar; 16.06.2019