【发布时间】:2018-09-14 16:19:04
【问题描述】:
查询:
List<int> companyIds = null;
(from car in context.GetTable<Car>()
where companyIds == null || companyIds.Contains(car.companyID)
select car)
.ToList();
结果:
在 System.Linq.Enumerable.OfType[TResult](IEnumerable 源) 在 System.Data.Linq.SqlClient.QueryConverter.VisitContains(表达式序列,表达式值) 在 System.Data.Linq.SqlClient.QueryConverter.VisitInner(表达式节点) 在 System.Data.Linq.SqlClient.QueryConverter.VisitExpression(表达式 exp) 在 System.Data.Linq.SqlClient.QueryConverter.VisitBinary(BinaryExpression b) 在 System.Data.Linq.SqlClient.QueryConverter.VisitInner(表达式节点) 在 System.Data.Linq.SqlClient.QueryConverter.VisitExpression(表达式 exp) 在 System.Data.Linq.SqlClient.QueryConverter.VisitWhere(表达式序列,LambdaExpression 谓词) 在 System.Data.Linq.SqlClient.QueryConverter.VisitInner(表达式节点) 在 System.Data.Linq.SqlClient.QueryConverter.ConvertOuter(表达式节点) 在 System.Data.Linq.SqlClient.SqlProvider.BuildQuery(表达式查询,SqlNodeAnnotations 注释) 在 System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(表达式查询) 在 System.Data.Linq.DataQuery
1.System.Collections.Generic.IEnumerable<T>.GetEnumerator() at System.Collections.Generic.List1..ctor(IEnumerable1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable1 源) 在 EVaultSDK.Services.CompanyService.Get...
如果我添加 ToList
context.GetTable<Car>().ToList()
有效
【问题讨论】:
-
问号运算符在这里适用吗?
-
@maccettura 不确定我是否同意,上面提供的代码在逻辑上是正确的,尽管它缺少
select所以我不确定它是否完整。 -
@maccettura,读一下短路,如果第一条是真的,不需要执行第二条
-
@cosset 您可以尝试在此处添加
ToList:context.GetTable<Car>().ToList()并查看是否再次遇到异常。你能发布异常的完整堆栈跟踪吗? -
@CetinBasoz,是的,你的答案可以称为解决方案,但它在逻辑上是不正确的,如果我传递给方法空(非空)companyIds,我希望该方法不返回任何内容,因为这个目的 companyIds 可以是可以为空,
标签: c# linq linq-to-sql