有关筛选集合的LINQ查询的建议
本文关键字:查询 LINQ 筛选 集合 | 更新日期: 2023-09-27 18:19:39
我有一个Customers
的List<T>
,其中包含以下信息:名称、产品、备注、预订日期和未读消息。
我的目标是使用这些字段和and运算符来筛选客户,但让我感到困扰的是,当有一个字段不用于筛选时。
例如,助理将查找具有特定产品的客户名称。我可以有一个LINQ查询,它看起来像这样。
var a = Customers.Where(x => x.name.Contains("someone") && x.product.Contains("nike"));
另一个例子是,它将寻找一个客户,与特定的产品,与一些注意
var a = Customers.Where(x => x.name.Contains("someone") && x.product.Contains("nike") && x.note.Contains("some note"));
另一个例子是,它将查找产品和预订日期var a=客户。其中(x=>x.product.Contains("某人")&;x.bookingdate=DateTime.Now);
我希望你注意到我将为这种过滤写多少不同的查询。
仅的名称、产品、备注、预订日期或未读信息
- 名称和产品
- 姓名和备注
- 姓名和预订日期
- 姓名和未读邮件
- 产品和注释
- 产品和预订日期
- 等
顺便说一句,我正在写一个Windows平板电脑应用程序,所以DataTable和LINQ Dyanmics是不可能的,我只能写一个字符串表达式。
我正在寻求一个建议和帮助如何解决这种过滤。
为什么不合并Where
?
var result = Customers
.Where(item => (null == name) || item.name.Contains(name))
.Where(item => (null == product) || item.product.Contains(product))
.Where(item => (null == note) || item.note.Contains(note))
...
因此,如果您不想通过任何参数(name
、product
等)进行筛选,只需将其设置为null
即可。
您可以动态构建您的语句。如果这是linq to sql
,您将从使用这种方法的更简单的执行计划中受益:
public class test
{
public string name;
public string lastname;
}
class Program
{
static void Main(string[] args)
{
var list = new List<test>
{
new test{name = "john", lastname = "smith"}
};
string fname = "aa";
string lname = "sm";
var select = list.Select(c=>c);
if (fname != null)
select = select.Where(c => c.name.Contains(fname));
if (lname != null)
select = select.Where(c => c.lastname.Contains(lname));
var result = select.ToList();
}
}