Entity framework 如何按非列字段排序?
我正在尝试创建一个实体SQL,它是两个子查询的并集Entity framework 如何按非列字段排序?,entity-framework,entity-sql,Entity Framework,Entity Sql,我正在尝试创建一个实体SQL,它是两个子查询的并集 (SELECT VALUE DISTINCT ROW(e.ColumnA, e.ColumnB, 1 AS Rank) FROM Context.Entity AS E WHERE ...) UNION ALL (SELECT VALUE DISTINCT ROW(e.ColumnA, e.ColumnB, 2 AS Rank) FROM Context.Entity AS E WHERE ...) ORDER BY *??* LIMIT
(SELECT VALUE DISTINCT ROW(e.ColumnA, e.ColumnB, 1 AS Rank) FROM Context.Entity AS E WHERE ...)
UNION ALL
(SELECT VALUE DISTINCT ROW(e.ColumnA, e.ColumnB, 2 AS Rank) FROM Context.Entity AS E WHERE ...)
ORDER BY *??* LIMIT 50
我试过:
ORDER BY Rank
及
但我一直得到:
System.Data.EntitySqlException: The query syntax is not valid. Near keyword 'ORDER'
编辑:
这是实体框架。在C#中,使用以下命令执行查询:
var esql = "...";
ObjectParameter parameter0 = new ObjectParameter("p0", value1);
ObjectParameter parameter1 = new ObjectParameter("p1", value2);
ObjectQuery<DbDataRecord> query = context.CreateQuery<DbDataRecord>(esql, parameter0, parameter1);
var queryResults = query.Execute(MergeOption.NoTracking);
var esql=“…”;
ObjectParameter0=新的ObjectParameter(“p0”,值1);
ObjectParameter1=新的ObjectParameter(“p1”,值2);
ObjectQuery=context.CreateQuery(esql,参数0,参数1);
var queryResults=query.Execute(MergeOption.NoTracking);
我的应用程序只有一小部分需要使用实体SQL。通常,主要用例是在我需要执行以下操作时:“WHERE列类似于‘A%value%和%multiple%通配符’”
我认为排名栏没有问题。我确实认为这就是我试图将ORDERBY应用于由UNIONALL连接的两个不同esql语句的方式。有人能建议:
谢谢。您没有说您使用的是哪台SQL server,我们可以假定为MS SQL 2012吗?这个问题完全与特定的SQL server实现可以做什么和不能做什么有关。我不认为这是一个实体框架问题,tag removedLuke:这是一个实体框架问题。我正在使用实体SQL,请参见。实体SQL是一种类似SQL的语言,允许您在实体框架中查询概念模型。概念模型将数据表示为实体和关系,实体SQL允许您以使用SQL的人熟悉的格式查询这些实体和关系。并非实体框架中的所有查询都必须使用LINQ。有些查询不能使用LINQ(表达式或方法语法)进行组合。但是,这并不重要,因为这是实体SQL语法,并且适用于概念模型。
orderby
是否适用于不使用union的情况?i、 e.如果您只使用一个select语句,它是否有效?
var esql = "...";
ObjectParameter parameter0 = new ObjectParameter("p0", value1);
ObjectParameter parameter1 = new ObjectParameter("p1", value2);
ObjectQuery<DbDataRecord> query = context.CreateQuery<DbDataRecord>(esql, parameter0, parameter1);
var queryResults = query.Execute(MergeOption.NoTracking);