【问题标题】:Linq get all objects that implement interfaceLinq获取所有实现接口的对象
【发布时间】:2013-02-05 12:41:41
【问题描述】:

有没有可能得到这样的东西:

return Session.Query<A>().Where(x => x is B).ToList();

其中 B 派生自 A 为接口工作(即获取所有实现某个接口的对象)?谢谢。

【问题讨论】:

  • 它有一个OfType&lt;B&gt;() 调用,但我不确定它是否与Session.Query 兼容;可能是,但我没有足够的信心将其发布为答案。 :)

标签: c# linq c#-4.0


【解决方案1】:

您不能直接将此语句转换为 SQL。首先,您必须评估查询或使用AsEnumerable()

return Session.Query<A>().AsEnumerable().Where(x => x is B).ToList();

或者:

return Session.Query<A>().AsEnumerable().OfType<B>().ToList();

AsEnumerable之后的部分会在内存中执行。

【讨论】:

  • 谢谢。这基本上意味着我必须首先从数据库中获取所有对象,这在我的情况下会很糟糕。
  • 是的,SQL Server 没有关于您的对象实现的接口的信息。我建议创建一些鉴别器列,您可以在其上过滤对象的“类型”。我还建议不要将您的业务层接口与实体映射混合 -> 最好在上面创建一个域层并将这些接口放在那里。
猜你喜欢
  • 1970-01-01
  • 2010-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-25
  • 2011-08-16
  • 1970-01-01
相关资源
最近更新 更多