Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.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 orderby子句中发生InvalidOperationException_C#_.net_Linq_Linq To Sql_Invalidoperationexception - Fatal编程技术网

C# Linq orderby子句中发生InvalidOperationException

C# Linq orderby子句中发生InvalidOperationException,c#,.net,linq,linq-to-sql,invalidoperationexception,C#,.net,Linq,Linq To Sql,Invalidoperationexception,以下是我使用的linq语句: var sortedList = (from p in OriginalList where p.NValue != null orderby Math.Abs(p.NValue.Value) descending select p); OriginalList是包含10000多个元素的事务对象列表。NValue是事务的可空属性。每次更新OriginalList时,都会执行该语句 我发现,此语句

以下是我使用的linq语句:

var sortedList =
        (from p in OriginalList
         where p.NValue != null
         orderby Math.Abs(p.NValue.Value) descending
         select p);
OriginalList是包含10000多个元素的事务对象列表。NValue是事务的可空属性。每次更新OriginalList时,都会执行该语句

我发现,此语句不时会引发以下异常: System.InvalidOperationException:可为null的对象必须具有值

我试着做单元测试,并用一个只有一个事务的原始列表进行测试。此事务具有null N值。它不会触发此异常

有人知道这里发生了什么吗?非常感谢

我们正在使用LINQtoSQL。以下是堆栈跟踪:

2011-10-05 16:14:06826[SRV101 DC\Admin][59]错误Utils.AProxy`1-加载期间的AProxy[TProxy]错误

System.InvalidOperationException: Nullable object must have a value.

at CServer.TLoader.b__2(Trasaction p) in c:\...\TLoader.cs:line 61
at System.Linq.EnumerableSorter`2.ComputeKeys(TElement[] elements, Int32 count)
at System.Linq.EnumerableSorter`1.Sort(TElement[] elements, Int32 count)
at System.Linq.OrderedEnumerable`1.d__0.MoveNext()
at CServer.TLoader.GetMultipliers(IEnumerable`1 OriginalList) in c:\...\TLoader.cs:line 64
at CServer.TProxy.OnLoad() in c:\...\TProxy.cs:line 29
at Utils.AProxy`1.Load() in c:\...\AProxy.cs:line 252

我不认为Math.Abs在LINQtoSQL中是受支持的,所以您可以这样做

var sortedList =
        (from p in OriginalList
         where p.NValue != null
         orderby p.NValue.Value < 0 ? (p.NValue.Value * -1) : p.NValue.Value descending
         select p);
var分类列表=
(来源于原始列表中的p)
其中p.NValue!=null
orderby p.NValue.Value<0?(p.NValue.Value*-1):p.NValue.Value递减
选择p);

您看到的错误似乎表明您正在尝试对空值求值。请尝试改用.GetValuerDefault,否则将where子句更改为检查HasValue rater,而不仅仅是与null进行比较:

var sortedList h= 
        (from p in OriginalList 
         where p.NValue.HasValue 
         orderby Math.Abs(p.NValue.Value) descending 
         select p); 

在您的情况下,p.NValue=null可因此p.NValue==null求值为True,但p.NValue.HasValue==false。

请告诉我们您使用的是哪种LINQ—原始列表的确切类型是什么?,您使用的是LINQ到SQL、LINQ到NHibernate等吗?堆栈跟踪会很有帮助。DigeMail的答案呢?我肯定看到它是正确的。@他删除了它,因为他错过了
where p.n值=null
子句。像线程错误一样嘎嘎作响。另一个线程在枚举查询时更改nvalue。