'System.Collections.Generic.List<int>.Contains(int)' 有一些无效参数

'System.Collections.Generic.List<int>.Contains(int)' has some invalid arguments

实体框架查询显示错误,不知道为什么。如果我想获取主要 ID 的列表。

            int PlantDemandId = 1;
            var result = (from c in context.tbl_PlantSupply
                          where c.DemandId == PlantDemandId
                          select c.Id).ToList();

c.Id是主键

当我使用 c.DemandId 时,它工作正常。

当我使用 c.Id 时,它在以下查询中显示错误。

            var result1 = (from c in context.tbl_NoOfPlantSupplied
                           join p in context.PlantationTypes on c.PlantationTypeId equals p.Id
                           join cl in context.Clones on c.CloneId equals cl.Id
                           where result.Contains(c.PlantSupplyId)

                           select new
                           {
                               PlantSupplyId = c.PlantSupplyId,
                               SourceOfSupplyId = c.SourceOfSupplyId,
                               PlantationTypeId = c.PlantSupplyId,
                               PlantationTypeName=p.Name,
                               CloneId = c.CloneId,
                               CloneName=cl.Name,
                               Supply = c.Supply
                           }).ToList();

where result.Contains(c.PlantSupplyId) : 这行显示错误

    'System.Collections.Generic.List<int>.Contains(int)' has some invalid arguments
     convert from int? to int

你不能比较int?和诠释。使用

c.PlantSupplyId.HasValue && result.Contains(c.PlantSupplyId.Value)

改为

PlantSupplyId 似乎有空值。请检查 tbl_NoOfPlantSupplied 是否有空值。我确定是的。这就是为什么错误要求您将可为空的 int(int?)转换为 int,因为您不能在 contains() 函数中传递 null。

如果 PlantSupplyId 列中有空值是可以的,那么您已经通过消除空值行在查询中处理了该问题。