如何知道linq中的子类型

时间:2012-08-01 05:27:21

标签: .net linq entity-framework ef-code-first

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

通过选择所有用户,我怎么知道特定用户是管理员或经理或成员。我必须在网格中显示所有用户数据,其中列名称为我需要显示管理员或经理或成员的类型

2 个答案:

答案 0 :(得分:1)

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

输出为enter image description here

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 { }
}

答案 1 :(得分:0)

您可以使用Enumerable.OfType Method提取某些确切类别的项目的子集合,例如

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

或者您可以使用is运算符检查每个项目:

foreach(User item in collection)
{
    if(item is Admin)
    {
    }
    else
    ...
}