1
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)
4

2 回答 2

0

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

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

于 2013-01-26T09:10:24.463 回答
0

您可以使用 DynamicLINQ(也可以与 LINQ to SQL 一起使用) - 请参阅Maarten 的帖子- 或者您可以使用以下方法:

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

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

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

视情况而定,您使用 anObjectContext或 aDbContext的方式会objSet有所不同:

  • 对象上下文

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

var objSet = db.CITY;
  • DbContext(EF 代码优先)

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可以在此处找到有关该方法的完整文档。

于 2013-01-26T09:28:57.610 回答