首先对不起,如果我的头衔不清楚,但我确实很难用英文写成简单的句子:)。
假设我有一个管理网站,人和超级英雄,我有2个课程:
public class Person
{
[Key]
public int PersonId { get; set; }
[MaxLength(100)]
public string Name { get; set; }
}
public class SuperHero:Person
{
[MaxLength(100)]
public string SuperHeroName { get; set; }
public virtual ICollection<SuperPower> SuperPowers{ get; set; }
}
在我的数据库中,我有这个:
人1:Id = 1姓名=“Alex Flimster”Discrimiator =“人”
第2人:ID = 2姓名=“Bruce Wayne”辨别器=“SuperHero”SuperHeroName =“蝙蝠侠”
我知道我是否这样做:
var test = from Context.Person select p;
我得到所有人,英雄与否。
如果我只想要英雄,我会这样做:
var test = from Context.Person.OfType<SuperHero>() select p;
我的问题是:我如何才能得到这个人?
var test = from Context.Person.OfType<Person>() select p;
将返回与第一次测试相同的内容。
修改 我想我的问题并不完全清楚。 假设我有200个人,并且在那个10个超级英雄之上。我需要一个返回所有Person的查询,这些Person只是person而不是可能的heritant类。 (假设我有另一个类'VideoGame Hero'也从人那里继承。我需要一个简单的查询,只是个人,而不是其他类)
谢谢!
答案 0 :(得分:9)
试试这个
from p in Context.Person
where !(p is SuperHero)
select p
或流利的
Context.Person.Where(p => !(p is SuperHero))
更新:SQL将如下所示:
SELECT
[Extent1].[Discriminator] AS [Discriminator],
[Extent1].[PersonId] AS [PersonId],
[Extent1].[Name] AS [Name],
[Extent1].[SuperHeroName] AS [SuperHeroName]
FROM [dbo].[Person] AS [Extent1]
WHERE ([Extent1].[Discriminator] IN (N'SuperHero',N'Person'))
AND ([Extent1].[Discriminator] <> N'SuperHero')