C# 如何从父类中提取唯一的子类型和属性

C# 如何从父类中提取唯一的子类型和属性,c#,sql,sql-server,C#,Sql,Sql Server,场景描述: 我在c#中有一个名为“Employee”的父类,有几个子类从中继承。例如,“兼职”、“全职”和其他继承自“员工” 某个部门的所有员工都获得基本工资,比如300美元。如果他们是全职员工,他们将获得300美元的基本工资加上200美元的全职奖金 我们有许多类别的员工,所有员工都可以获得300美元的基本积分,并根据其类别获得独特的奖金 需要帮助的问题: 我正试图编写一个C#to SQL例程,让该部门的每个人每周增加300美元的积分,再加上他们类别的独特奖金。我已经有几个例行程序,每月返回员工

场景描述:

我在c#中有一个名为“Employee”的父类,有几个子类从中继承。例如,“兼职”、“全职”和其他继承自“员工”

某个部门的所有员工都获得基本工资,比如300美元。如果他们是全职员工,他们将获得300美元的基本工资加上200美元的全职奖金

我们有许多类别的员工,所有员工都可以获得300美元的基本积分,并根据其类别获得独特的奖金

需要帮助的问题:

我正试图编写一个C#to SQL例程,让该部门的每个人每周增加300美元的积分,再加上他们类别的独特奖金。我已经有几个例行程序,每月返回员工名单和他们在公司的长期账户。 是否有任何方法可以只提取唯一的类别

dbo.PaymentRoutine
(@EmployeeClassification VARCHAR(50), @WeeklyPay DECIMAL(18,02))

UPDATE [Employee].Financial
set PaymentBalance += @UniqueBonus
我该怎么做?我可以手动键入代码中的每一类工作人员,并运行增量。。。但我希望有人能帮我找到一个不那么新手的解决方案:)
是否有任何方法可以查看列表的唯一子级,并在这样的例程中从这些子级访问属性?还是我的做法不对?请提前感谢您的评论和帮助我学习。

除非您有充分的理由在C#中这样做,否则我认为您应该用SQL完成所有工作。您需要一个EmployeeType和一个Department表,这样PaymentRoutine存储过程就可以从数据库中获得UniqueBonus,而无需修改参数。然后,您可以使用这些表中的信息获取所需的任何列表或报告

如果确实需要在C#中执行此操作,则可以在基类上声明虚拟属性,并在子类中重写它们。然后可以使用Linq查询所有员工的集合

    [TestMethod]
    public void ListCategories()
    {
        var staff = new List<Employee>();
        staff.Add(new InvestmentBanker {Name="Fred Goodwin", Department = "NW"});
        staff.Add(new InvestmentBanker {Name="Nick Leeson", Department = "Barings"});
        staff.Add(new Cleaner{ Name = "George Formby", Department="NW" });

        var sb = new StringBuilder();
        foreach (var e in staff)
        {
            sb.Append(string.Format(
             "update Employee set PaymentBalance=PaymentBalance+{0}" + 
             " where Name='{1}'\r\n", 
             e.CategoryBonus, e.Name));                
        }

    }


}


public class Employee
{
    public string Department { get; set; }
    public string Name { get; set; }
    public virtual string Category { get { return "Employee"; } }
    public virtual decimal CategoryBonus { get { return 0; } }
}
public class Cleaner:Employee
{
    public override string Category {get { return "Cleaner"; }}
    public override decimal CategoryBonus{get { return 0.01M; }}
}
public class InvestmentBanker:Employee
{
    public override string Category { get { return "Banker"; } }
    public override decimal CategoryBonus { get { return 999999999999999M; } }        
}
[TestMethod]
公共物品类别(
{
var staff=新列表();
添加(新投资银行家{Name=“Fred Goodwin”,Department=“NW”});
新增(新投资银行家{Name=“Nick Leeson”,Department=“Barings”});
添加(新清洁工{Name=“George Formby”,Department=“NW”});
var sb=新的StringBuilder();
foreach(员工中的var e)
{
sb.Append(string.Format)(
“更新员工集PaymentBalance=PaymentBalance+{0}”+
“其中Name='{1}'\r\n”,
e、 CategoryBonus,e.Name));
}
}
}
公营雇员
{
公共字符串部门{get;set;}
公共字符串名称{get;set;}
公共虚拟字符串类别{get{return“Employee”;}
公共虚拟十进制分类函数{get{return 0;}}
}
公营清洁员:雇员
{
公共重写字符串类别{get{返回“Cleaner”;}
公共重写decimal CategoryBonus{get{return 0.01M;}}
}
公共类投资银行家:雇员
{
公共重写字符串类别{get{return“Banker”;}
公共重写decimal CategoryBonus{get{return 9999999999m;}
}

感谢您抽出时间发表文章和评论!哈!我喜欢那里的乔治·福姆比插科打诨!;)我想知道有多少人真的得到了那个参考:3个整洁的编码,希望我擅长,哈哈。