当前位置:  开发笔记 > 编程语言 > 正文

是否有使用Linq动态创建过滤器的模式?

如何解决《是否有使用Linq动态创建过滤器的模式?》经验,为你挑选了3个好方法。

是否有使用Linq动态创建过滤器的模式?

我需要在列表上创建自定义过滤,过去我只是动态创建SQL ...看起来这对Linq来说是不可能的.



1> Geoff..:

查看ScottGu博客中的Dynamic Linq Library:

例如,下面是一个标准的类型安全的LINQ to SQL VB查询,它从Northwind数据库中检索数据并将其显示在ASP.NET GridView控件中:

Dim Northwind As New NorthwindDataContext
Dim query = From q In Northwind.Products Where p.CategoryID = 2 And p.UnitPrice > 3 Order By p.SupplierID Select p

Gridview1.DataSource = query
GridView1.DataBind()

使用LINQ DynamicQuery库我可以重新编写上面的查询表达式,就像这样

Dim Northwind As New NorthwindDataContext
Dim query = Northwind.Products .where("CategoryID=2 And UnitPrice>3") . OrderBy("SupplierId")
Gridview1.DataSource = query
GridView1.DataBind()

请注意条件where子句和sort-orderby子句现在如何使用字符串表达式而不是代码表达式.因为它们是后期绑定的字符串,所以我可以动态构造它们.例如:我可以使用我的应用程序为最终用户业务分析师提供UI,使他们能够自己构建查询(包括任意条件子句).



2> Amy B..:

动态Linq是一种方法.

对于您的场景,这可能有点过分.考虑:

IQueryable query = db.Customers;

if (searchingByName)
{
  query = query.Where(c => c.Name.StartsWith(someletters));
}
if (searchingById)
{
  query = query.Where(c => c.Id == Id);
}
if (searchingByDonuts)
{
  query = query.Where(c => c.Donuts.Any(d => !d.IsEaten));
}
query = query.OrderBy(c => c.Name);
List = query.Take(10).ToList();



3> Shawn Miller..:

动态编写表达式谓词

推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有