【问题标题】:How to pull unique child types and attributes from parent classes如何从父类中提取唯一的子类型和属性
【发布时间】:2013-11-30 18:55:42
【问题描述】:

场景描述:

我在 C# 中有一个名为“Employee” 的父类,几个子类从该类继承。例如,“Part-time”、“Full-Time”等继承自“Employee”。

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

我们有许多类别的员工,所有这些员工都获得 300 美元的基本信用以及根据他们的类别而定的独特奖金。

需要帮助的问题:

我正在尝试编写一个 C# 到 SQL 例程,该例程增加该部门中的每个人每周 300 美元的积分加上他们类别的独特奖金。我已经有几个例程返回员工的月度列表及其在公司的长期账户。 有没有办法只提取独特的类别?

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

UPDATE [Employee].Financial
set PaymentBalance += @UniqueBonus

我该怎么做?我可以手动输入我们在代码中拥有的每一类工人并运行增量......但我希望有人能够帮助我提供一个不那么新手的解决方案:) 有什么方法可以查看列表 的 unique 子元素,并在这样的例程中访问这些子元素的属性?还是我以错误的方式处理这个问题?提前感谢任何 cmet 并帮助我学习。

【问题讨论】:

    标签: c# sql sql-server


    【解决方案1】:

    除非您有充分的理由在 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; } }        
    }
    

    【讨论】:

    • 感谢您花一秒钟的时间发帖和 cmets!
    • 哈哈!喜欢那里的 George Formby 插科打诨! ;) 我想知道有多少人真正得到了那个参考:3 整洁的编码,希望我擅长它,哈哈。
    猜你喜欢
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多