linq查询其中int ID属于List <int>
我遇到了linq查询的问题。 我以前使用过类似的方法,但是我不明白现在可能会出现什么问题。
错误
'System.Collections.Generic.List.Contains(int)'的最佳重载方法匹配有一些无效参数
参数'1':不能从'int?'转换 到'int'; 指的是rTestResults的where子句
码:
List<int> rMTCPlates = (from rP in mDataContext.Plates
where rP.SOItem.SONumberID == aSONumber
select rP.ID).ToList();
var rTestResults = from rT in mDataContext.TestSamplesViews
where rMTCPlates.Contains(rT.PlateID)
select rT;
任何想法发生了什么?
任何帮助感激,
谢谢
您可以在此处使用空合并运算符:
var rTestResults = from rT in mDataContext.TestSamplesViews
where rMTCPlates.Contains(rT.PlateID ?? 0)
select rT;
这是因为ID字段可以为空,而集合中的项目则不可以。
您可能忘记将其标记为数据库中的not-null,以便设计人员以此方式生成它。
数据库中的最佳标记不为空并刷新数据。
另外,U并没有指定你正在使用哪个LINQ,假设你使用了LINQ数据库,我不确定Contains扩展方法在Linq to Sql或Linq to Entities中工作,即使修正了上面的问题,你也可能会得到另一个NotSupportedException。
因此,要么使用两个查询,第一个访问数据库,第二个查询从加载的集合中获取值,或者考虑使用'Contains()'解决方法使用Linq to Entities ?.
如果你正在使用linq-to对象,而且你不关心上面所说的所有垃圾,只需使用下面的代码:
var rTestResults = from rT in mDataContext.TestSamplesViews
where rT.PlateID.HasValue &&
rMTCPlates.Contains(rT.PlateID.Value)
select rT.Value;
由于System.Collections.Generic.List.Contains(int)
的异常,我可以猜测mDataContext.TestSamplesViews.PlateID
是可以为空的。
如果你只是想要一个easyquick修复,和/或你不能更改PlateID
所以它不能为空,你可以检查它是否有一个值:
var rTestResults = from rT in mDataContext.TestSamplesViews
where (rT.PlateID.HasValue && rMTCPlates.Contains(rT.PlateID))
select rT;
链接地址: http://www.djcxy.com/p/15881.html
上一篇: linq query where int ID belongs to List<int>
下一篇: Opencv setting a color pixel ends up blurring to neighboring pixels