C#Lambda多标准,子列表
我想知道下面的内容是否可行,我仍然在思考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是一个列表,而不是单个实体,因此
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属性。。请提供更多的代码。我不明白为什么这被否决了。。。请在投票时发表评论,以便我们了解问题所在。在这个答案上花了很多精力。我不明白为什么这个被否决了。。。请在投票时发表评论,以便我们了解问题所在。对这个答案进行了大量的研究。