C# Linq到SQL OrderBy问题
我知道这个问题已经被问过很多次了,我知道Distinct调用会破坏之前的订单,所以我必须在之后使用OrderBy,但在这种情况下,我肯定是做错了其他事情C# Linq到SQL OrderBy问题,c#,asp.net-mvc,linq,C#,Asp.net Mvc,Linq,我知道这个问题已经被问过很多次了,我知道Distinct调用会破坏之前的订单,所以我必须在之后使用OrderBy,但在这种情况下,我肯定是做错了其他事情 int[] resources = (from a in context.Beamline_Requests join b in context.Technique_Requests on a.Technique_Request_ID equals b.ID where
int[] resources = (from a in context.Beamline_Requests
join b in context.Technique_Requests on a.Technique_Request_ID equals b.ID
where b.Beamtime_Request_ID == id
select a.Beamline_ID).Distinct().OrderBy(a => a.ID).ToArray();
我收到:
无法将lambda表达式转换为类型“System.Linq.Expressions.LambdaExpression”,因为它不是委托类型
订购方上的错误消息。它还说:
“int”不包含“ID”的定义,并且找不到接受类型为“int”的第一个参数的扩展方法“ID”(是否缺少using指令或程序集引用?)
因此,显然“a”不再是上下文的一部分
我已经成功地完成了类似的工作,但在这些情况下,我将Linq投影到ViewModel中,因此在这种情况下,它必须与尝试将其制作为数组有关。您仅选择field
Beamline\u ID
,然后尝试OrderBy ID
,select的中间结果没有字段ID
,它只是int
数字的投影。您可以执行以下操作OrderBy(a=>a)
:
int[] resources = (from a in context.Beamline_Requests
join b in context.Technique_Requests on a.Technique_Request_ID equals b.ID
where b.Beamtime_Request_ID == id
select a.Beamline_ID).Distinct().OrderBy(a => a).ToArray();
有关评论:
但我的问题是,我确实需要按ID订购,而不是按
波束线ID,即使我只需要阵列中的波束线ID
或者在更简单的版本中,您可以实现:
int[] resources = (from a in context.Beamline_Requests
join b in context.Technique_Requests on a.Technique_Request_ID equals b.ID
where b.Beamtime_Request_ID == id
orderby b.ID
select a.Beamline_ID)
.Distinct()
.ToArray();
您只选择了字段
Beamline\u ID
,然后您尝试了OrderBy ID
,select的中间结果没有字段ID
,它只是int
数字的投影。您可以执行以下操作OrderBy(a=>a)
:
int[] resources = (from a in context.Beamline_Requests
join b in context.Technique_Requests on a.Technique_Request_ID equals b.ID
where b.Beamtime_Request_ID == id
select a.Beamline_ID).Distinct().OrderBy(a => a).ToArray();
有关评论:
但我的问题是,我确实需要按ID订购,而不是按
波束线ID,即使我只需要阵列中的波束线ID
或者在更简单的版本中,您可以实现:
int[] resources = (from a in context.Beamline_Requests
join b in context.Technique_Requests on a.Technique_Request_ID equals b.ID
where b.Beamtime_Request_ID == id
orderby b.ID
select a.Beamline_ID)
.Distinct()
.ToArray();
好吧,这是有道理的。但我的问题是,我确实需要按ID排序,而不是按波束线ID排序,即使我只需要阵列中的波束线ID。我该怎么做呢?@SteveGiordano,在这种情况下,选择一个匿名类型,同时使用
Beamline\u ID
和ID
,然后按ID
排序,然后选择Beamline\u ID
,然后应用distinct。更新了答案code@SteveGiordano,也加入了一个更简单的版本,我相信也会这样做thing@Habib,您的简化版本是我最初尝试的版本,但是当orderby后面出现Distinct时,订单就丢失了。似乎在第一种情况下也会发生这种情况,因为在OrderBy之后会再次出现Distinct…但我会尝试一下。@Habib我能够通过稍微重新排列您的第一个建议答案来实现它.Distinct().OrderBy(a->a.ID).选择(r=>r.bemline_ID).ToArray()代码>好,这很有意义。但我的问题是,我确实需要按ID排序,而不是按波束线ID排序,即使我只需要阵列中的波束线ID。我该怎么做呢?@SteveGiordano,在这种情况下,选择一个匿名类型,同时使用Beamline\u ID
和ID
,然后按ID
排序,然后选择Beamline\u ID
,然后应用distinct。更新了答案code@SteveGiordano,也加入了一个更简单的版本,我相信也会这样做thing@Habib,您的简化版本是我最初尝试的版本,但是当orderby后面出现Distinct时,订单就丢失了。似乎在第一种情况下也会发生这种情况,因为在OrderBy之后会再次出现Distinct…但我会尝试一下。@Habib我能够通过稍微重新排列您的第一个建议答案来实现它.Distinct().OrderBy(a->a.ID).选择(r=>r.bemline_ID).ToArray()代码>