在 linq 查询中附加字符串,其中条件

本文关键字:条件 字符串 linq 查询 | 更新日期: 2023-09-27 17:56:19

string StrWhere = string.Empty;
StrWhere = " AND ID =5";
String StrQuery ="SELECT * FROM CITY_MAS WHERE + StrWhere";

我想在 LINQ 中实现相同的目标。类似于以下查询的内容...

var result = from c in db.CITY_MAS   
         where + StrWhere
         select new { c.ID,c.Name)

在 linq 查询中附加字符串,其中条件

可以使用动态 Linq 动态添加条件。

请参阅 http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

您可以使用DynamicLINQ(也适用于LINQ to SQL) - 请参阅Maarten的文章 - 或者您可以使用以下方法:

ObjectQuery<T>包含一个Where方法,该方法允许定义字符串自定义谓词。因此,可以按如下方式重写查询:

var strWhere = "it.ID = 5";
var result = objSet.Where(strWhere);

在 where 子句中,it引用当前对象/表 - 类似于 c# 中的thisobjSet是一个ObjectSet<CITY>(继承自ObjectQuery<T>)。

根据不同的情况,无论您使用ObjectContext还是DbContext,到达objSet的方法都不同:

  • 对象上下文

ObjectContext CITY已经是一个ObjectSet<CITY>,因此不需要真正的额外操作,因此:

var objSet = db.CITY;
  • DbContext (EF Code First)

这里CITY是一个DbSet<CITY>Where方法的描述覆盖不可用。但是,每个DbContext都有一个基础ObjectContext可用于执行一些更复杂的查询。您只需要使用它,然后创建ObjectSet

// assuming: using System.Data.Entity.Infrastructure;
var var objContext = ((IObjectContextAdapter)ctx).db;
var objSet = objContext.CreateObjectSet<CITY>();

另请参阅此博客文章以了解其他用途。可以在此处找到有关ObjectSet<T>.Where方法的完整文档。