Entity framework 如何按非列字段排序?

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

我正在尝试创建一个实体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 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);