Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq到SQL OrderBy问题_C#_Asp.net Mvc_Linq - Fatal编程技术网

C# Linq到SQL 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

我知道这个问题已经被问过很多次了,我知道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 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()