.net – 包含lambda的C#linq表达式

我试图利用’包含’来模拟旧的SQL’,其中id为(1,2,3,4)’过滤查询的方式.

但是我在使用它时遇到了一些困难,因为我的身份处于更深层次.

码:

public class Category
    {
        public long Id { get; set; }
        public string Name { get; set; }
    }

    public class Characteristica
    {
        public Category Category { get; set; }
        public int Id { get; set; }
        public string Value { get; set; }
    }

    public class Person
    {
        public string Name { get; set; }
        public List<Characteristica> Appearance { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var persons = new List<Person>
            {
                new Person { Name = "Person A",Appearance = new List<Characteristica> { new Characteristica { Id = 22 },new Characteristica { Id = 5 },new Characteristica { Id = 12 } }},new Person { Name = "Person B",Appearance = new List<Characteristica> { new Characteristica { Id = 1 },new Characteristica { Id = 6 },new Characteristica { Id = 11 } }},new Person { Name = "Person C",Appearance = new List<Characteristica> { new Characteristica { Id = 2 },new Characteristica { Id = 8 },new Characteristica { Id = 13 } }},new Person { Name = "Person D",new Characteristica { Id = 10 } }},new Person { Name = "Person E",new Person { Name = "Person F",new Characteristica { Id = 23 } }},};

            var listOfSearchedIds = new List<int> { 22,23 };
            var selected = persons.Select(p => p.Appearance.Where(a => listOfSearchedIds.Contains(a.Id))).ToList();
        }
    }

现在我试图通过使用contains feauture从我的收藏中获取’Person A’和’Person F’.但是我无法看到我在这里做错了什么.

有人能否解释我做错了什么?
我尝试了不同版本的lambda,这是我可以获得的关闭,但是我从表达式中获取了所有6个项目.

解决方法

你的方式是正确的,但你应该使用Where而不是Select
var selected = persons.Where(p => p.Appearance
                .Where(a => listOfSearchedIds.Contains(a.Id))
                .Any()).ToList();

并且您需要使用Any来检查p.Appearance.Where中的返回序列是否包含任何元素.或者您可以直接使用Any并使其更短:

var selected = persons.Where(p => p.Appearance
                .Any(a => listOfSearchedIds.Contains(a.Id))
                .ToList();

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...