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