【问题标题】:Best Overloaded method match has some invalid arguments最佳重载方法匹配有一些无效参数
【发布时间】:2018-07-14 21:16:24
【问题描述】:

我有两张桌子deal_outlet 和vendors_outlet。我正在尝试将deal_outlet 表中的outlet_id 列表与供应商表进行比较,但.contain 方法显示错误包含一些无效参数。我真的不明白这段代码中的问题。

public ActionResult Detail_of_deal(int id)
{

    var d1 = db.deal_outlet.Where(x => x.outlet_id==id).ToList();
   f_model.model4 = db.vendors_outlet.Where(x =>d1.Contains(x.outlet_id)).ToList();

    var d = obj.detail_of_image(id,ref model);
    return View(f_model);
}

【问题讨论】:

  • 如果可能,您能否包含错误消息的确切文本。这段代码中有很多地方可能会因为许多不同的原因引发许多不同的错误。
  • 它在这行代码“d1.Contains(x.outlet_id)”中准确显示错误
  • 错误:错误 1 ​​'System.Collections.Generic.List.Contains(repository.deal_outlet)' 的最佳重载方法匹配有一些无效参数 C:\Users\sidra\ Documents\Visual Studio 2012\Projects\deals_for_you\Controllers\userController.cs 31 57 deal_for_you

标签: asp.net-mvc


【解决方案1】:

根据代码的目标,您可以尝试以下操作:

    public ActionResult Detail_of_deal(int id)
        {
            var d1 = db.deal_outlet.Where(x => x.outlet_id==id).ToList();

            f_model.model4 = db.vendors_outlet.AsEnumerable().Select(x => d1.Contains(x.outlet_id)).ToList();

            var d = obj.detail_of_image(id,ref model);
            return View(f_model);
        }

这应该使f_model.model4 成为具有匹配deal_outlet.id 的所有vendors_outlets 的列表

【讨论】:

  • d1 是一个列表,它没有一行,所以我如何获取 d1.id??
  • 我的错误,误解了目的。我已经用应该可以工作的东西更新了这个例子。
  • 您建议的解决方案给出以下异常“无法创建类型为 'repository.deal_outlet' 的常量值。在此上下文中仅支持原始类型或枚举类型。”
【解决方案2】:

如果列表包含传入的 item,则 Linq Contains 方法返回 true。您要查看 deal_outlet 对象列表是否包含 int,显然它赢了不。

不是投影deal_outlets 的集合,而是投影整数列表:

var d1 = db.deal_outlet.Where(x => x.outlet_id==id).Select(x => x.outlet_id);
f_model.model4 = db.vendors_outlet.Where(x =>d1.Contains(x.outlet_id)).ToList();

但从逻辑上讲,这与:

f_model.model4 = db.vendors_outlet.Where(x =>x.outlet_i==id)).ToList();

所以不清楚你要做什么。

编辑

根据您的 cmets,我相信这些是您想要的查询:

我正在尝试从 deal_outlet 表中获取 outlet_id 列表,其中 deal_id 等于 id,

 var d1 = db.deal_outlet.Where(x => x.deal_id==id).ToList();

现在想将此列表与 vendor_outlet 表进行比较,并从 deal_outlet 表中获取 outlet_id 等于 vendor_outlet 表中的 outlet_id 的那些行

获取要匹配的 ID 列表:

var ids = d1.Select(x => x.outlet_id).ToList();

并使用Contains 查看列表是否包含相关表中的任何 ID:

f_model.model4 = db.vendors_outlet.Where(vo => ids.Contains(vo.outlet_id))
                                  .ToList();

【讨论】:

  • 1- 我正在尝试从 deal_outlet 表中获取 outlet_id 列表,其中 deal_id 等于 id,2- 现在想将此列表与 vendor_outlet 表进行比较,并从 deal_outlet 表中获取 oulet_id 等于 outlet_id 的行在 vendor_outlet 表中
  • 我的要求是将一个表中的列表与另一个表进行比较
  • 异常:“附加信息:无法创建类型为 'repository.deal_outlet' 的常量值。在此上下文中仅支持原始类型或枚举类型。”
  • @Alina 下一个最佳方法是提取 ID 列表并在 Contains 查询中使用它。您不能内联,因为 EF 引擎会尝试将其转换为 SQL 语句并且不知道如何处理内部查询。
  • 这个解决方案对我有用,非常感谢@D Stanley
猜你喜欢
  • 2015-10-14
  • 2013-01-07
  • 2014-05-17
  • 1970-01-01
  • 2014-04-14
  • 2012-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多