Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 实体框架代码优先:使用鉴别器从表中选择数据_.net_Entity Framework_Ef Code First - Fatal编程技术网

.net 实体框架代码优先:使用鉴别器从表中选择数据

.net 实体框架代码优先:使用鉴别器从表中选择数据,.net,entity-framework,ef-code-first,.net,Entity Framework,Ef Code First,首先,如果我的标题不清楚,我很抱歉,但我确实很难用英语把它写成简单的句子:) 假设我有一个管理人物和超级英雄的网站,我有两个类: public class Person { [Key] public int PersonId { get; set; } [MaxLength(100)] public string Name { get; set; } } public class Sup

首先,如果我的标题不清楚,我很抱歉,但我确实很难用英语把它写成简单的句子:)

假设我有一个管理人物和超级英雄的网站,我有两个类:

 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; }
    }
我了解所有人,不管是不是英雄

如果我只想要英雄,我会:

var test = from Context.Person.OfType<SuperHero>() select p;
var test=from Context.Person.OfType()选择p;
我的问题是:我如何只得到那个人

var test = from Context.Person.OfType<Person>() select p; 
var test=from Context.Person.OfType()选择p;
将返回与第一次测试相同的结果

编辑 我想我的问题不是很清楚。 假设我有200人,在这10个超级英雄之外。我需要一个查询,将返回所有的人,只是个人和没有任何可能的遗传类。 (假设我还有另一个类“视频游戏英雄”,它也继承自person。我需要一个简单的查询,该查询将仅为person而不是其他类)

谢谢

试试这个

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')
选择
[Extent1].[Discriminator]作为[Discriminator],
[extend1].[PersonId]作为[PersonId],
[Extent1].[Name]作为[Name],
[Extent1]。[SuperHeroName]作为[SuperHeroName]
来自[dbo].[Person]作为[Extent1]
其中([Extent1].[Discriminator]在(N'SuperHero',N'Person')中)
和([Extent1].[Discriminator]N‘超级英雄’)

为了澄清一下,你是说你想要的不是超级英雄的人?是的,就是这样,我只想要Person,没有任何可能的继承类(假设Person是由超级英雄和员工继承的(虚拟示例),我真的很好奇由该查询生成的SQL:)很好的调用:)。现在让我们假设这个人是由两类“超级英雄”和“视频游戏英雄”继承的,我想要一个直接的查询,而不是写在哪里。(p=>!((p是超级英雄)| |!p是雇员))(如果可能的话)谢谢:)@lazyberezovsky Supery!非常感谢@Tom我认为您无法访问鉴别器列-它在内部使用为EF(如上面的示例)。因此,您需要手动过滤掉所有类型,或者在这个blog@SergeyBerezovskiy中编写类似的内容。您将如何修改这个(流畅的语法)以同时包含
ICollection SuperPowers
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')