我正在使用C#和WPF作为前端的EF。我需要提供一个UI,以便用户可以创建自己的查询并获得结果。用户界面将是表格列表和要从中选择的列表(对UI不满意。需要改进但我的想法中有新的标记)。
所以我的问题是如何创建,合并(现有查询)和执行查询。
有sql类Entity Client提供程序,objectquery类。我使用了ObjectQuery
string querystring = @"SELECT PrjDev FROM prjscenario";
ObjectQuery<PrjDev> prjdevquery = new ObjectQuery<PrjDev>(querystring, ptxobjcontext);
string cpmmandtext = prjdevquery.CommandText;
int prjdevnum = prjdevquery.Count();
它正在发挥作用。但是当我运行一些复杂的查询时。它不起作用。示例代码:
string querystring = @"SELECT PrjDev FROM prjscenario WHERE PrjDev.PrjDevType = 10";
错误:
'PrjDevType'不是。的成员 'Transient.collection [Skm.Ptx.Data.Emf.PrjDev(可空=真,默认值=)]'。 提取集合的属性 元素,使用子查询进行迭代 在收集。近乎简单 标识符,第1行,第45列。
任何想法,为什么它对一个简单的查询有好处,但它不适用于复杂的查询?
先谢谢, Ñ
答案 0 :(得分:11)
作为参数传递给ObjectQuery<T>
构造函数的查询不是SQL查询,而是ESQL(实体SQL)查询。虽然语法相似,但它们是非常不同的语言。您可以了解有关ESQL on this page的更多信息。
如果要对ObjectContext的底层数据库执行真正的SQL,可以使用ObjectContext.ExecuteStoreQuery
方法,或者只通过ObjectContext.Connection
属性检索连接,并从中编写“经典”ADO.NET代码那里。