Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否存在使用Linq动态创建过滤器的模式?_Linq_Linq To Sql_.net 3.5 - Fatal编程技术网

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

是否存在使用Linq动态创建过滤器的模式?,linq,linq-to-sql,.net-3.5,Linq,Linq To Sql,.net 3.5,是否存在使用Linq动态创建过滤器的模式 我需要在列表上创建自定义筛选,过去我只会动态创建SQL…使用Linq似乎不可能做到这一点。查看ScottGu的博客: 例如,下面是一个标准类型安全的LINQ to SQL VB查询,该查询从Northwind数据库检索数据并将其显示在ASP.NET GridView控件中: Dim Northwind As New NorthwindDataContext Dim query = From q In Northwind.Products Where p.

是否存在使用Linq动态创建过滤器的模式

我需要在列表上创建自定义筛选,过去我只会动态创建SQL…使用Linq似乎不可能做到这一点。

查看ScottGu的博客:

例如,下面是一个标准类型安全的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,使他们能够自行构造查询(包括任意条件子句)。

类似的内容

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

动态Linq是一种方法

对于您的场景来说,这可能有点过头了。考虑:

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();
IQueryable查询=db.Customers;
如果(按名称搜索)
{
query=query.Where(c=>c.Name.StartsWith(somelets));
}
if(searchingById)
{
query=query.Where(c=>c.Id==Id);
}
如果(通过甜甜圈搜索)
{
query=query.Where(c=>c.Donuts.Any(d=>!d.IsEaten));
}
query=query.OrderBy(c=>c.Name);
List=query.Take(10.ToList();

这行吗?我发现:错误28重载解析失败,因为无法使用这些参数调用可访问的“OrderBy”:无法从这些参数推断类型参数的数据类型。显式指定数据类型可能会更正此错误。在.OrderBy子句中,我看不到'String'作为参数选项。@JohnnyBizzle-它可以工作。我在许多项目中使用它。仔细检查dynamic.cs是否在您的项目中,以及是否在using声明中正确引用了它。这很好。我从来不知道你能做到。这将解决我在高级搜索查询构建方面的问题。不错的1+1有趣的概念,但有点混乱
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();