.net 如何知道linq中的子类型

.net 如何知道linq中的子类型,.net,linq,entity-framework,ef-code-first,.net,Linq,Entity Framework,Ef Code First,我有一个实体用户(基类)。它有三个子实体Admin、Manager和Member 通过选择所有用户,我如何知道特定用户是管理员、经理或成员。我必须以列名显示网格中的所有用户数据,其中我需要显示管理员、经理或成员,您可以使用这些数据来提取某个确切类别的项目的子集合,例如 collection.OfType<Admin>().ToList() 这里有一个完整的解决方案。 简单地为每个实例调用GetType()方法 输出是 using System; using System.Colle

我有一个实体用户(基类)。它有三个子实体Admin、Manager和Member

通过选择所有用户,我如何知道特定用户是管理员、经理或成员。我必须以列名显示网格中的所有用户数据,其中我需要显示管理员、经理或成员

,您可以使用这些数据来提取某个确切类别的项目的子集合,例如

collection.OfType<Admin>().ToList()

这里有一个完整的解决方案。 简单地为每个实例调用GetType()方法

输出是

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TestBaseUserConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var users = new List<User>
                {
                    new User {Name = "User1"},
                    new Manager {Name = "User2"},
                    new Member {Name = "User3"},
                    new Student {Name = "User4"}
                };

            users.Select(p => new { p, UserTpe = p.GetType().Name })
                 .ToList()
                 .ForEach(t => Console.WriteLine("User Name = {0}, User Type = {1}", t.p.Name, t.UserTpe));
            Console.ReadLine();
        }
    }

    public class User
    {
        public string Name { get; set; }
    }

    public class Manager : User { }
    public class Member : User { }
    public class Student : User { }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
命名空间TestBaseUserConsoleApplication1
{
班级计划
{
静态void Main(字符串[]参数)
{
var users=新列表
{
新用户{Name=“User1”},
新经理{Name=“User2”},
新成员{Name=“User3”},
新学生{Name=“User4”}
};
Select(p=>new{p,UserTpe=p.GetType().Name})
托利斯先生()
.ForEach(t=>Console.WriteLine(“用户名={0},用户类型={1}”,t.p.Name,t.UserTpe));
Console.ReadLine();
}
}
公共类用户
{
公共字符串名称{get;set;}
}
公共类管理器:用户{}
公共类成员:用户{}
公共类学生:用户{}
}

为什么不将其保存在数据库中,作为一个角色,然后在类中看到该角色……并通过该角色进行筛选。会员能成为经理吗?这将是避免继承的另一个原因。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TestBaseUserConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var users = new List<User>
                {
                    new User {Name = "User1"},
                    new Manager {Name = "User2"},
                    new Member {Name = "User3"},
                    new Student {Name = "User4"}
                };

            users.Select(p => new { p, UserTpe = p.GetType().Name })
                 .ToList()
                 .ForEach(t => Console.WriteLine("User Name = {0}, User Type = {1}", t.p.Name, t.UserTpe));
            Console.ReadLine();
        }
    }

    public class User
    {
        public string Name { get; set; }
    }

    public class Manager : User { }
    public class Member : User { }
    public class Student : User { }
}