C#Lambda多标准,子列表

C#Lambda多标准,子列表,c#,list,lambda,filter,C#,List,Lambda,Filter,我想知道下面的内容是否可行,我仍然在思考lambda表达式 GetAll(x => x.Username.ToUpper().Contains(SEARCH) && x.AddressList.Type_ID == 98.ToList(); 这个代码的问题是“地址”是一个列表。基本上,我们希望在1)对用户名执行搜索和2)匹配子列表的属性后返回列表 从语义上讲,上面的代码不起作用,因为AddressList是一个列表,而不是单个实体,因此

我想知道下面的内容是否可行,我仍然在思考lambda表达式

    GetAll(x => x.Username.ToUpper().Contains(SEARCH) 
             && x.AddressList.Type_ID == 98.ToList();
这个代码的问题是“地址”是一个列表。基本上,我们希望在1)对用户名执行搜索和2)匹配子列表的属性后返回列表

从语义上讲,上面的代码不起作用,因为AddressList是一个列表,而不是单个实体,因此“Type_ID”不能作为选择项使用


这能做到吗

你是说类似的东西吗

GetAll(x => x.Username.ToUpper().Contains(SEARCH) 
             && x.AddressList.Any(e => e.Type_ID == 98));

你是说类似的东西吗

GetAll(x => x.Username.ToUpper().Contains(SEARCH) 
             && x.AddressList.Any(e => e.Type_ID == 98));

有一些扩展方法可以对列表进行操作,但仍然不清楚您想要做什么。是否希望在AddressList中的任何项的类型_ID为98的情况下得到结果?如果是,请使用Any函数。如果列表中的所有地址必须具有该类型ID,则使用all。下面是一些示例代码:

class Address
{
   public int Type_ID { get; set; }
   public Address(int Type_ID)
   {
      this.Type_ID = Type_ID;
   }
}

class Entry
{
   public List<Address> AddressList { get; set; }
   public string UserName { get; set; }
   public Entry(string name, List<Address> addresses)
   {
      AddressList = addresses;
      this.UserName = name;
   }
}

class EntryList
{
   private List<Entry> entries;

   public IEnumerable<Entry> GetAll(Func<Entry, bool> filter)
   {
      return entries.Where(filter).ToArray();
   }

   public EntryList(List<Entry> entries)
   {
      this.entries = entries;
   }
}

static void Main(string[] args)
{

   EntryList e1 = new EntryList(new List<Entry>()
      {new Entry("Fred with 1 98 address", new List<Address> { new Address(97), new Address(98) }),
         new Entry("Bob with no 98 address", new List<Address> { new Address(96), new Address(97) }),
         new Entry("Jerry with all 98 addresses", new List<Address> { new Address(98), new Address(98) })});

   var all98 = e1.GetAll(x => x.AddressList.All(y => y.Type_ID == 98));
   var any98 = e1.GetAll(x => x.AddressList.Any(y => y.Type_ID == 98));

   Console.WriteLine("Results for ALL:");
   foreach (var e in all98)
      Console.WriteLine(e.UserName);
   Console.WriteLine("Results for ANY:");
   foreach (var e in any98)
      Console.WriteLine(e.UserName);
}

有一些扩展方法可以对列表进行操作,但仍然不清楚您想要做什么。是否希望在AddressList中的任何项的类型_ID为98的情况下得到结果?如果是,请使用Any函数。如果列表中的所有地址必须具有该类型ID,则使用all。下面是一些示例代码:

class Address
{
   public int Type_ID { get; set; }
   public Address(int Type_ID)
   {
      this.Type_ID = Type_ID;
   }
}

class Entry
{
   public List<Address> AddressList { get; set; }
   public string UserName { get; set; }
   public Entry(string name, List<Address> addresses)
   {
      AddressList = addresses;
      this.UserName = name;
   }
}

class EntryList
{
   private List<Entry> entries;

   public IEnumerable<Entry> GetAll(Func<Entry, bool> filter)
   {
      return entries.Where(filter).ToArray();
   }

   public EntryList(List<Entry> entries)
   {
      this.entries = entries;
   }
}

static void Main(string[] args)
{

   EntryList e1 = new EntryList(new List<Entry>()
      {new Entry("Fred with 1 98 address", new List<Address> { new Address(97), new Address(98) }),
         new Entry("Bob with no 98 address", new List<Address> { new Address(96), new Address(97) }),
         new Entry("Jerry with all 98 addresses", new List<Address> { new Address(98), new Address(98) })});

   var all98 = e1.GetAll(x => x.AddressList.All(y => y.Type_ID == 98));
   var any98 = e1.GetAll(x => x.AddressList.Any(y => y.Type_ID == 98));

   Console.WriteLine("Results for ALL:");
   foreach (var e in all98)
      Console.WriteLine(e.UserName);
   Console.WriteLine("Results for ANY:");
   foreach (var e in any98)
      Console.WriteLine(e.UserName);
}

地址中包含哪些地址列表。。它是什么类型的。。它是否具有Type_ID属性。。请提供更多代码。什么地址包含地址列表。。它是什么类型的。。它是否具有Type_ID属性。。请提供更多的代码。我不明白为什么这被否决了。。。请在投票时发表评论,以便我们了解问题所在。在这个答案上花了很多精力。我不明白为什么这个被否决了。。。请在投票时发表评论,以便我们了解问题所在。对这个答案进行了大量的研究。