Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.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扩展调用中使用Linq扩展调用会引发异常_C#_Linq_Linq Extensions - Fatal编程技术网

C# 在另一个Linq扩展调用中使用Linq扩展调用会引发异常

C# 在另一个Linq扩展调用中使用Linq扩展调用会引发异常,c#,linq,linq-extensions,C#,Linq,Linq Extensions,上面的代码抛出一个null异常 当我像下面的代码一样添加ToList时,代码运行良好 var tagByGroupIds = TagandTaggroupsservice.SelectAllQuery() .Where(p => p.Tagid == i.TagId) .Select(p => p.Taggroupid); var tagGroups = Taggroupsservice.SelectA

上面的代码抛出一个null异常

当我像下面的代码一样添加ToList时,代码运行良好

var tagByGroupIds = TagandTaggroupsservice.SelectAllQuery()
                    .Where(p => p.Tagid == i.TagId)
                    .Select(p => p.Taggroupid);

var tagGroups = Taggroupsservice.SelectAllQuery()
                .Where(p => tagByGroupIds.Contains(p.Taggroupid)).ToList();
我不明白为什么。你能解释一下吗

更多细节。TagandTaggroup和Taggroup是数据库中的表

为第一个查询选择AllQuery

    var tagByGroupIds = TagandTaggroupsservice.SelectAllQuery()
                    .Where(p => p.Tagid == i.TagId)
                    .Select(p => p.Taggroupid).ToList();
在本例中,SelectAll是TagandTaggroup表。 cid是已传递的值,因此它不是null。它里面有一个int

在我们升级到.Net4.5.1之前,它一直运行良好。我不知道这是否与此有关。如能解释,将不胜感激

堆栈跟踪是按请求进行的

var query = from tt in SelectAll()
            join tg in TagGroups on tt.Taggroupid equals tg.Taggroupid
            where tg.cid== cid
            select tt;
return query.Distinct();

您应该发布完整的异常消息,包括堆栈跟踪。我不知道.net版本是否会有所不同。但是,它也不应该在以前的版本上运行,因为tagbyGroupID不会执行,并且在不执行相同的linq表达式并且调用List后立即执行之前,不能在另一个linq表达式中使用。如果您想使用嵌套,那么您需要像在SelectAll中一样使用join。谢谢您的评论。基于您的评论,并且因为我预感问题出在SelectAllQuery中,我尝试使用SelectAll运行相同的代码,它不进行任何连接,并且运行得非常完美。即使延迟执行,也可以实现结果@基于代码的您是对的,.net版本与此无关。旧代码不需要连接,这就解释了为什么在它工作之前。既然连接是问题所在,那是否意味着Linq到SQL转换器不知道如何转换语句?
System.NullReferenceException was unhandled by user code
HResult=-2147467261 
Message=Object reference not set to an instance of an object.
Source=System.Data.Linq

StackTrace:
   at System.Data.Linq.SqlClient.SqlFactory.Member(SqlExpression expr, MemberInfo member)
   at System.Data.Linq.SqlClient.QueryConverter.VisitMemberAccess(MemberExpression ma)
   at System.Data.Linq.SqlClient.QueryConverter.VisitInner(Expression node)
   at System.Data.Linq.SqlClient.QueryConverter.VisitExpression(Expression exp)
   at System.Data.Linq.SqlClient.QueryConverter.VisitBinary(BinaryExpression b)
   at System.Data.Linq.SqlClient.QueryConverter.VisitInner(Expression node)
   at System.Data.Linq.SqlClient.QueryConverter.VisitExpression(Expression exp)
   at System.Data.Linq.SqlClient.QueryConverter.VisitWhere(Expression sequence, LambdaExpression predicate)
   at System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(MethodCallExpression mc)
   at System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(MethodCallExpression mc)
   at System.Data.Linq.SqlClient.QueryConverter.VisitInner(Expression node)
   at System.Data.Linq.SqlClient.QueryConverter.VisitSelect(Expression sequence, LambdaExpression selector)
   at System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(MethodCallExpression mc)
   at System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(MethodCallExpression mc)
   at System.Data.Linq.SqlClient.QueryConverter.VisitInner(Expression node)
   at System.Data.Linq.SqlClient.QueryConverter.VisitDistinct(Expression sequence)
   at System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(MethodCallExpression mc)
   at System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(MethodCallExpression mc)
   at System.Data.Linq.SqlClient.QueryConverter.VisitInner(Expression node)
   at System.Data.Linq.SqlClient.QueryConverter.VisitWhere(Expression sequence, LambdaExpression predicate)
   at System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(MethodCallExpression mc)
   at System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(MethodCallExpression mc)
   at System.Data.Linq.SqlClient.QueryConverter.VisitInner(Expression node)
   at System.Data.Linq.SqlClient.QueryConverter.VisitSelect(Expression sequence, LambdaExpression selector)
   at System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(MethodCallExpression mc)
   at System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(MethodCallExpression mc)
   at System.Data.Linq.SqlClient.QueryConverter.VisitInner(Expression node)
   at System.Data.Linq.SqlClient.QueryConverter.VisitContains(Expression sequence, Expression value)
   at System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(MethodCallExpression mc)
   at System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(MethodCallExpression mc)
   at System.Data.Linq.SqlClient.QueryConverter.VisitInner(Expression node)
   at System.Data.Linq.SqlClient.QueryConverter.VisitExpression(Expression exp)
   at System.Data.Linq.SqlClient.QueryConverter.VisitWhere(Expression sequence, LambdaExpression predicate)
   at System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(MethodCallExpression mc)
   at System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(MethodCallExpression mc)
   at System.Data.Linq.SqlClient.QueryConverter.VisitInner(Expression node)
   at System.Data.Linq.SqlClient.QueryConverter.ConvertOuter(Expression node)
   at System.Data.Linq.SqlClient.SqlProvider.BuildQuery(Expression query, SqlNodeAnnotations annotations)
   at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query)
   at System.Data.Linq.DataQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at ***.***.TagByProductcontroller.getTagGroupsByProduct(Int32 productId)