linq 迭代实体框架对象属性

gzjq41n4  于 2022-12-06  发布在  其他
关注(0)|答案(2)|浏览(155)

我有一个表“StaffMembers”,其中的列表示一个月中工作的天数,模型中的属性如下:

public class StaffMember
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Gender { get; set; }
    public int Phone { get; set; }
    public string Email { get; set; }
    public string BirthDate { get; set; }
    public int OctDays { get; set; }
    public int NovDays { get; set; }
    public int DecDays { get; set; }
    public int JanDays { get; set; }
    public int FebDays { get; set; }
    public int MarDays { get; set; }
    public int AprDays { get; set; }

}
现在我使用linq检索特定的staffMember:

var staffMember = (from b in db.StaffMembers
                where b.Id == Id
                select b).FirstOrDefault();

我想做的是循环staffMember中的months属性,并将所有工作日加在一起,以获得一年中的总工作日。例如,如果他在10月工作10天,在12月工作20天,在1月工作30天,我想用一种方法来迭代月份并对天数求和。

x6yk4ghg

x6yk4ghg1#

您可以通过迭代对象属性并对其应用条件来完成此操作。

static void Main(string[] args)
    {
        var staffA = new StaffMember();
        int totalWorkDays = 0;
        staffA.AprDays = 5;
        staffA.FebDays = 7;

        foreach (var item in staffA.GetType().GetProperties())
        {
            if (item.Name.EndsWith("Days"))
            {
                totalWorkDays += (int)item.GetValue(staffA)!;
            }
        }
        Console.WriteLine(totalWorkDays);
    }

这个代码段输出(5 + 7)=〉12

b1zrtrql

b1zrtrql2#

您可以使用反射来迭代这些属性,但我不推荐这样做,因为无论如何您都必须指出要考虑哪些属性,这是因为您有多个整型属性,如Id和Phone,因此您无法在循环中指明要对整型属性求和,你必须明确地表明你想对OctDays等等求和,或者写一些算法来表明当前属性负责月份。(而且在我看来比反思更简单的办法)就只是把每个月的显式和总和弄得这样:

var sum = staffMember.OctDays + staffMember.NovDays + staffMember.DecDays + staffMember.JanDays + staffMember.FebDays + staffMember.MarDays + staffMember.AprDays

相关问题