Subcategory LINQ SubSelect

Hi - I'm trying to get a condition to apply to subnets. I can get criteria to get the right parents back. However, I want the sub-collection to be limited by criteria.

In my code example, I only need people with LINK skills; In addition, I only want the skills for each person to be equal to "LINK". That is, each person should have only "LINK" for their skills.

Thanks in advance.

List<Skill> skills = new List<Skill>();
skills.Add(new Skill(){SkillName="ASP.NET"});
skills.Add(new Skill(){SkillName="C#"});
Person p1 = new Person(){ Name="Me", Skills=skills} ;

List<Skill> skills2 = new List<Skill>();
skills2.Add(new Skill(){SkillName="ASP.NET"});
skills2.Add(new Skill(){SkillName="C#"});
skills2.Add(new Skill(){SkillName="LINQ"});
Person p2 = new Person(){ Name="You", Skills=skills2} ;

List<Person> People = new List<Person>();
People.Add(p1);
People.Add(p2);

var oResult = (from item in People
    from sk in item.Skills
    where sk.SkillName == "LINQ" 
    select item 
    ).ToList();

When I launched it. I get p2 (correct), but I want P2 skills equal only LINQ

+3
source share
2 answers

Do it:

var oResult = (from item in People
                where item.Skills.Count() == 1 &&
                item.Skills.Any(s => s.SkillName == "LINQ")
                select item
    ).ToList();

This query will not return anything because p2 (You) has other skills in addition to LINQ.

, :

foreach (var person in oResult)
{
    person.Skills.RemoveAll(s => !s.SkillName.Equals("LINQ"));
}

: LINQ . , - foreach, .

+4

:

var oResult = (from item in People
               where item.Skills != null
               where item.Skills.Count() > 0
               where item.Skills.All(s => s.SkillName == "LINQ")
               select item
              ).ToList();

, Skills , , , Skills null.

, All true, , , . , Skills, Count(), . Any(), , .

var oResult = (from item in People
               where item.Skills != null
               where item.Skills.Any()
               where item.Skills.All(s => s.SkillName == "LINQ")
               select item
              ).ToList();
0

Source: https://habr.com/ru/post/1761426/


All Articles