фильтр на CollectionProperties дает мне все 4 записи вместо 2 - PullRequest
0 голосов
/ 19 марта 2020

У меня есть список lstCollectionInstances, в котором есть 4 экземпляра коллекции,

var lstCollectionInstances = new List<CollectionInstance>
        {
            new CollectionInstance
            {
                Name = "A",
                CollectionProperties = new List<CollectionProperty>
                {
                    new CollectionProperty {Name = "P1", Value = 10, DataType = "D"}
                }
            },
            new CollectionInstance
            {
                Name = "A",
                CollectionProperties = new List<CollectionProperty>
                {
                    new CollectionProperty {Name = "P2", Value = "H1", DataType = "S"}
                }
            },
            new CollectionInstance
            {
                Name = "B",
                CollectionProperties = new List<CollectionProperty>
                {
                    new CollectionProperty {Name = "P1", Value = 20, DataType = "D"}
                }
            },
            new CollectionInstance
            {
                Name = "B",
                CollectionProperties = new List<CollectionProperty>
                {
                    new CollectionProperty {Name = "P2", Value = "H2", DataType = "S"}
                }
            },
        };

Теперь, когда я фильтрую его по CollectionProperty типам данных D, это должно дать мне 2 записи, но ниже кода давая мне все 4 записи, чего здесь не хватает?

var X = lstCollectionInstances.Select(x => new CollectionInstance
        {
            Name = x.Name,
            CollectionProperties = x.CollectionProperties.Where(cp => cp.DataType == "D").ToList()
        }).ToList();

Ответы [ 2 ]

1 голос
/ 19 марта 2020

Этот выбирает все экземпляры со свойством типа D.

var result= lstCollectionInstances
    .Where(x => x.CollectionProperties.Any(y => y.DataType == "D"))
    .ToList();
1 голос
/ 19 марта 2020

Это потому, что вы выполняете Select в каждом элементе lstCollectionInstances и где в CollectionProperties. Он вернет 4 предмета, 2 из которых имеют пустые CollectionProperties. Вы должны выполнить Where сначала как:

  var X = lstCollectionInstances.Where(a => a.CollectionProperties.Any(cp => cp.DataType == "D")).Select(x => new CollectionInstance
        {
            Name = x.Name,
            CollectionProperties = x.CollectionProperties
        }).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...