【问题标题】:Getting entities of a certain type using entity frameworks return error - LINQ to Entities does not recognize the method 'System.Type GetType()'使用实体框架获取特定类型的实体返回错误 - LINQ to Entities 无法识别方法“System.Type GetType()”
【发布时间】:2012-09-24 06:36:33
【问题描述】:

我正在尝试过滤掉某种类型的实体。我正在使用实体框架,我有一个父实体,以及从父实体继承的各种子实体。我正在尝试过滤掉其中一个孩子。

例如,我有以下结构:

  • 地址:实体
    • 邮政编码:地址
    • 街道:地址

一个用户实体有一个地址的引用。如何获取与 PostCode 类型的地址关联的用户列表?

即我试过了:

 var query = from User p in context.Users
                        where p.Address.GetType() == typeof(PostCode)
                        select p;

但我明白了:

LINQ to Entities 无法识别方法“System.Type GetType()” 方法,并且该方法不能翻译成商店表达式。

我见过一些解决方案,首先是获取用户列表,然后选择特定类型的用户列表。该方案的问题是查询首先获取所有用户;我希望我的查询包含过滤器,因为我有很多用户。

谢谢!

【问题讨论】:

  • 等等。用户只有一个地址?所以它只能有 PostCode 或 Street?是不是错了?
  • 好吧,为了简单起见,我编造了这个例子。可能不是最好的例子,但是是的,它只能有 PostCode 或 Street。
  • 尝试使用p.Address is PostalCode
  • 完成了这项工作!将其添加为答案 ;)
  • 另外注意,一旦你获得了以邮政编码为地址的用户列表,并且你选择了其中一个用户,你可以将其地址转换为邮政编码吗?或者有没有更好的方法来获取 PostCode 对象?

标签: c# entity-framework asp.net-mvc-3 linq-to-entities gettype


【解决方案1】:

尝试使用 is 运算符。

 var query = from User p in context.Users
                    where p.Address is PostCode
                    select p;

【讨论】:

  • 你能举个例子吗?请注意,用户与地址类型无关。来自上下文中的用户 p。用户在哪里 p.Address.OfType ...?这似乎不起作用
  • 在另一张纸条上,当我获得用户列表时,我选择其中一个 (myUser) - 我如何获得 PostCode 对象。即 PostCode p = myUser.Address (那行不通,也许是强制转换?还是有更好的方法?)
  • Euphoric 的原始解决方案不起作用。它抛出以下错误,“LINQ to Entities 不支持指定的类型成员 'Address'。仅支持初始化程序、实体成员和实体导航属性。”
  • @spadelives 我很确定问题出在代码中的其他地方。地址是属性吗?
  • 是的,地址是一个属性。它不起作用,因为这样的语句不能用 SQL 翻译。
猜你喜欢
  • 2017-04-10
  • 1970-01-01
  • 2016-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多