【问题标题】:Method declared on type cannot be called with instance of type在类型上声明的方法不能用类型的实例调用
【发布时间】:2020-12-05 11:20:05
【问题描述】:

我有这个问题:

var isTrue = db.Locations.Any(l => l.Position == location.Position && db.Layer.Find(l.LayerId).Name == "MyLayerName");

抛出异常

在类型上声明的方法不能用类型的实例调用

为什么会发生这种情况,我该如何解决?

【问题讨论】:

  • 这是一个质量相当低的问题。您已经给出了一堆代码,并带有异常消息的标题并询问原因。要回答这个问题,您需要了解您实际尝试做的事情、原因、相关模型和模式的最小表示。实际错误,通常在异常消息中包含更多信息。等等等等。试图用这么少的信息问一个问题对任何人都没有好处,包括你

标签: c# entity-framework entity-framework-core


【解决方案1】:

假设 dbDbContext 并且您的模型具有导航属性,请尝试:

var isTrue = db.Locations.Any(l => l.Position == location.Position && l.Layer.Name == "MyLayerName");

否则重构,因为 ef core 无法使用 Find 生成查询,您必须使用 ToList() 获取所有位置:

var isTrue = db.Locations.Where(l => l.Position == location.Position).ToList().Any(l => db.Layer.Find(l.LayerId).Name == "MyLayerName");

请注意,第二个将调用您的数据库 n + 1 次。

【讨论】:

  • 您的第一个建议正是我最终所做的,但现在它给了我一个错误,它无法翻译查询。它似乎正在尝试执行连接但失败了。
  • 听起来像是你的迁移
猜你喜欢
  • 2017-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多