如何在EF上运行SQL查询? [英] How to run SQL Queries on EF?

查看:27
本文介绍了如何在EF上运行SQL查询?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用C#和WPF作为前端的EF.我需要提供一个用户界面,以便用户可以创建自己的查询并获取结果.用户界面将是表格列表和列列表,以供选择(用户界面不满意.需要改进,但我脑中有了新的打勾).

I am working on EF with C# and WPF as front end. I need to provide a UI for so user can create his own query and get the result. 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).

所以我的问题是如何创建,合并(现有查询)和执行查询.

So my question is how create, merge(existing query) and execute the queries.

有sql类的Entity Client提供程序,objectquery类.我使用了ObjectQuery

There are sql class Entity Client provider, objectquery class. I used 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";

错误:

'PrjDevType'不是的成员"Transient.collection [Skm.Ptx.Data.Emf.PrjDev(Nullable = True,DefaultValue =)]".提取集合的属性元素,使用子查询进行迭代在集合上.近乎简单标识符,第1行,第45列.

'PrjDevType' is not a member of '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.

任何想法,为什么它对一个简单的查询有用,但对复杂的查询却不起作用?

Any Idea, why it is good for one simple query but it is not working for complex queries?

在此先感谢您,N

推荐答案

作为参数传递给 ObjectQuery< T> 构造函数的查询不是SQL查询,而是ESQL(实体SQL)询问.尽管语法相似,但是它们是非常不同的语言.您可以在此页面上进一步了解ESQL .

The query passed as a parameter to the ObjectQuery<T> constructor is NOT an SQL query, it's an ESQL (Entity SQL) query. While similar in syntax, they are very different languages. You can learn more about ESQL on this page.

如果要对ObjectContext的基础数据库执行真实的SQL,可以使用 ObjectContext.ExecuteStoreQuery 方法,或仅通过 ObjectContext.Connection 属性检索连接.并从那里编写经典" ADO.NET代码.

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.

这篇关于如何在EF上运行SQL查询?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆