2008-08-27 63 views

回答

19

时退房Dynamic Linq Library从ScottGu的博客:

例如,下面是一个标准的类型安全LINQ到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() 

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

+0

这是行不通的吗?我得到这个:Error 重载解析失败,因为没有可访问的'OrderBy'可以用这些参数调用: 无法从这些参数中推断出类型参数的数据类型。明确指定数据类型可能会更正此错误。 我在.OrderBy子句中看不到'String'作为参数选项。 – JohnnyBizzle 2011-05-31 08:11:43

+0

@JohnnyBizzle - 它的工作原理。我在很多项目中使用它。仔细检查dynamic.cs是否在您的项目中,并且您在使用声明中正确引用了它。 – Geoff 2011-05-31 10:43:15

2

这样的事情?

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

,将创建一个像

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

动态LINQ的SQL语句是一条路可走。

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

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();