有没有使用Linq来dynamic创buildfilter的模式?

有没有使用Linq来dynamic创buildfilter的模式?

我有需要在列表上创build自定义过滤,在过去,我只是dynamic地创buildSQL …它似乎并不像Linq那样可能。

从ScottGu的博客中查看Dynamic Linq Library :

例如,下面是一个标准的types安全的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库,我可以像上面这样重写上面的查询expression式

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

请注意,conditional-where子句和sort-orderby子句现在如何使用stringexpression式而不是代码expression式。 因为他们是迟到的string,我可以dynamic地构造它们。 例如:我可以使用我的应用程序为最终用户业务分析人员提供UI,使他们能够自行构build查询(包括任意条件子句)。

dynamicLinq是一个方法去。

这可能是你的情况矫枉过正。 考虑:

 IQueryable<Customer> 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<Customer> = query.Take(10).ToList(); 

dynamic构成表情预测

像这样的东西?

 var myList = new List<string> { "a","b","c" }; var items = from item in db.Items where myList.Contains(item.Name) select item; 

这将创build一个像SQL语句

 SELECT * FROM Items [t0] where Name IN ('a','b','c')