在linq查询中附加条件的条件

时间:2013-01-26 09:00:22

标签: c# entity-framework linq-to-entities

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)

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

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

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

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

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

根据您使用ObjectContext还是DbContext,取决于objSet的方式不同:

  • ObjectContext的

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

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

此处CITYDbSet<CITY>,并且Where方法的描述覆盖不可用。但是,每个DbContext都有一个基础ObjectContext,您可以使用它来执行更复杂的查询。您只需要访问它然后创建ObjectSet

// assuming: using System.Data.Entity.Infrastructure;

var var objContext = ((IObjectContextAdapter)ctx).db;
var objSet = objContext.CreateObjectSet<CITY>();

另请参阅this blog post了解其他用途。 可以找到ObjectSet<T>.Where方法的完整文档here