简体   繁体   English

如何在EF上运行SQL查询?

[英]How to run SQL Queries on EF?

I am working on EF with C# and WPF as front end. 我正在使用C#和WPF作为前端的EF。 I need to provide a UI for so user can create his own query and get the result. 我需要提供一个UI,以便用户可以创建自己的查询并获得结果。 The UI will be list of tables and list of columns to select from (Not happy with UI. Need to improve but new ticks in my mind). 用户界面将是表格列表和要从中选择的列表(对UI不满意。需要改进但我脑子里有新的标记)。

So my question is how create, merge(existing query) and execute the queries. 所以我的问题是如何创建,合并(现有查询)和执行查询。

There are sql class Entity Client provider, objectquery class. 有sql类Entity Client提供程序,objectquery类。 I used ObjectQuery 我使用了ObjectQuery

string querystring = @"SELECT PrjDev FROM prjscenario"; 
ObjectQuery<PrjDev> prjdevquery = new ObjectQuery<PrjDev>(querystring, ptxobjcontext);
string cpmmandtext = prjdevquery.CommandText;
int prjdevnum =  prjdevquery.Count();

It is working. 这是工作。 But when i run some complex query. 但是当我运行一些复杂的查询时。 It is not working. 它不起作用。 Example code : 示例代码:

string querystring = @"SELECT PrjDev FROM prjscenario WHERE PrjDev.PrjDevType = 10";

Error : 错误:

'PrjDevType' is not a member of 'Transient.collection[Skm.Ptx.Data.Emf.PrjDev(Nullable=True,DefaultValue=)]'. 'PrjDevType'不是'Transient.collection [Skm.Ptx.Data.Emf.PrjDev(Nullable = True,DefaultValue =)]'的成员。 To extract a property of a collection element, use a subquery to iterate over the collection. 要提取集合元素的属性,请使用子查询迭代集合。 Near simple identifier, line 1, column 45. 近简单标识符,第1行,第45列。

Any Idea, why it is good for one simple query but it is not working for complex queries? 任何想法,为什么它对一个简单的查询有好处,但它不适用于复杂的查询?

Thanks in Advance, N 先谢谢你,N

The query passed as a parameter to the ObjectQuery<T> constructor is NOT an SQL query, it's an ESQL (Entity SQL) query. 作为参数传递给ObjectQuery<T>构造函数的查询不是SQL查询,而是ESQL(实体SQL)查询。 While similar in syntax, they are very different languages. 虽然语法相似,但它们是非常不同的语言。 You can learn more about ESQL on this page . 您可以在此页面上了解有关ESQL的更多信息。

If you want to execute real SQL against the ObjectContext's underlying database, you can use the ObjectContext.ExecuteStoreQuery method, or just retrieve the connection through the ObjectContext.Connection property and write "classic" ADO.NET code from there. 如果要对ObjectContext的底层数据库执行真正的SQL,可以使用ObjectContext.ExecuteStoreQuery方法,或者只是通过ObjectContext.Connection属性检索连接,并从那里编写“经典”ADO.NET代码。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM