Как отфильтровать список в новый список того же типа, используя LINQ? - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть две модели, одна - это предмет, а другая - список этих предметов. Использование LINQ. Служба возвращает все элементы, я хотел бы использовать второй метод для дальнейшей фильтрации этих элементов на основе их идентификатора.

public class MyItem {
    public string Id;
    public string Description;
}

public class MyItems {
    public List<MyItem> ItemsList
}

public MyItems GetAllItems()
{
    return someServiceThatReturnsMyItems()
}

public MyItems GetItemsById(string[] itemIds)
{
    return GetAllItems().ItemsList.Where(x => itemIds.Contains(x .Id)).ToList();
}

Я бы хотел, чтобы getItemsById возвратил отфильтрованную коллекцию MyItems. Я попытался выбрать в новый список, однако типы никогда не совпадают, у меня всегда возвращается один MyItem.

Я могу сделать что-то вроде этого:

return new MyItems()
{
    ItemsList = GetAllItems().ItemsList.Where(x => insuredIds.Contains(x.Id)).ToList()
};

Можно ли сделать это в одной строке LINQ или у меня есть это право?

Спасибо.

1 Ответ

0 голосов
/ 05 апреля 2020

Вы можете реализовать пользовательский метод расширения , аналогичный методу ToList, который делает это следующим образом:

public static class LinqExtensions
{
    public static MyItems ToMyItems(this IEnumerable<MyItem> source)
    {
        return new MyItems { ItemsList = source.ToList() };
    }
}

Ваш GetItemsById метод затем становится следующим:

public MyItems GetItemsById(string[] itemIds)
{
    return GetAllItems().ItemsList.Where(x => itemIds.Contains(x.Id)).ToMyItems();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...