【问题标题】:c# asp.net: Cannot compare elements of type 'System.Int32[]'. Only primitive types, enumeration types and entity types are supported.'c#asp.net:无法比较“System.Int32[]”类型的元素。仅支持原始类型、枚举类型和实体类型。
【发布时间】:2020-02-21 15:16:38
【问题描述】:

我正在尝试根据 AspNetUsersGroupMaps 表中的一组值查询我的 ProductiveUnits 表。 AspNetUserID 可以链接到 AspNetUsersGroupMaps 表上的许多 UserGroupID。我只想返回 ProductiveUnits 列表,其中 ProductiveUnit.UserGroupID = AspNetUsersGroupMaps.UserGroupID 如下:

   public ActionResult ProductiveUnits_Read([DataSourceRequest]DataSourceRequest request)
    {
        var UserID = User.Identity.GetUserId();
        int[] selectedIds = db.AspNetUsersGroupMaps.Where(t => t.AspNetUserID == UserID).Select(x => x.UserGroupID).ToArray();
        IQueryable<ProductiveUnit> productiveunits = db.ProductiveUnits.Where(p => p.UserGroupID.Equals(selectedIds)); 
        DataSourceResult result = productiveunits.ToDataSourceResult(request, productiveUnit => new {
            ProdUnitID = productiveUnit.ProdUnitID,
            PU_Text = productiveUnit.PU_Text,
            PUGroup = productiveUnit.PUGroup,
            SerialNo = productiveUnit.SerialNo,
            ExtSysPU_ID = productiveUnit.ExtSysPU_ID,
            ProdUnitNo = productiveUnit.ProdUnitNo,
            CompanyID = productiveUnit.CompanyID,
            Criticality = productiveUnit.Criticality,
            YearModel = productiveUnit.YearModel,
            CostCentreID = productiveUnit.CostCentreID,
            CurrencyID = productiveUnit.CurrencyID,
            StartupDate = productiveUnit.StartupDate,
            UserGroupID = productiveUnit.UserGroupID,
        });

        return Json(result);
    }

我收到以下错误:

无法比较“System.Int32[]”类型的元素。只有原始 支持类型、枚举类型和实体类型。'

我的 AspNetUsersGroupMap 模型:

public partial class AspNetUsersGroupMap
{
    public int ID { get; set; }
    public string AspNetUserID { get; set; }
    public int UserGroupID { get; set; }

    public virtual UserGroup UserGroup { get; set; }
    public virtual AspNetUser AspNetUser { get; set; }
}

请帮忙

【问题讨论】:

  • 您正在尝试将单个 int 与 int 数组进行比较
  • 是的,但我不知道数组比较的代码是什么。如果我将其更改为包含,我会收到以下错误:'int[]' 不包含“包含”的定义和最佳扩展方法重载 'Queryable.Contains(IQueryable , int?)' 需要类型为 'IQueryable' 的接收器

标签: c# asp.net asp.net-mvc linq


【解决方案1】:

使用Contains:

p => selectedIds.Contains(p.UserGroupID)

您无法比较 int[]int 是否相等,但您可以检查 int[] 是否包含特定的 int

【讨论】:

  • 当我更改为您建议的代码时,我收到以下错误:'int[]' does not contain a definition for 'Contains' and the best extension method overloading 'Queryable.Contains(IQueryable, int?)' 需要类型为 'IQueryable' 的接收器
  • p.UserGroupID 必须可以为空,尝试强制转换:p =&gt; selectedIds.Contains((int)p.UserGroupID)
  • 谢谢@Johnathan Barclay,这已经解决了我的问题!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-20
  • 1970-01-01
  • 2014-11-16
  • 2019-05-09
  • 1970-01-01
相关资源
最近更新 更多