C# 最佳实践Linq驱动属性

C# 最佳实践Linq驱动属性,c#,linq,C#,Linq,学生班级的属性等级/等级LINQ由分数和评分表驱动 我找到了两种不同的方法来计算分数。如下所示为坡度和坡度LINQ 好的课堂设计最好的做法是什么。提供dis/优势或更好的解决方案 计分课 public class Scoring { public int minScale { get; set; } public int maxScale { get; set; } public string Grade { get; set; } } public class Stu

学生班级的属性等级/等级LINQ由分数和评分表驱动

我找到了两种不同的方法来计算分数。如下所示为坡度和坡度LINQ

好的课堂设计最好的做法是什么。提供dis/优势或更好的解决方案

计分课

public class Scoring
{
    public int minScale { get; set; }
    public int maxScale { get; set; }
    public string Grade { get; set; }
}

public class Student
{

    public int StudentID { get; set; }
    public string StudentName { get; set; }
    public int StandardID { get; set; }
    public int Points { get; set; }
    public string Grade { get; set; }

    public static List<Scoring> sc { get; set; }
    public string GradeLinq
    {
        get
        {
            return sc?.Find(w => w.minScale < Points && w.maxScale > Points).Grade;
        }
    }
}

var scoringList = new List<Scoring>
{
    new Scoring { maxScale=100, minScale=85, Grade ="A" },
    new Scoring { maxScale=84, minScale=70, Grade ="B" },
    new Scoring { maxScale=69, minScale=50, Grade ="C" },
    new Scoring { maxScale=49, minScale=40, Grade ="D" },
    new Scoring { maxScale=39, minScale=25, Grade ="E" },
    new Scoring { maxScale=24, minScale=0, Grade ="F" },
};



var studentList = new List<Student>()
{
    new Student() { StudentID = 1, StudentName = "John", StandardID =1, Points = 88 },
    new Student() { StudentID = 2, StudentName = "Moin", StandardID =1, Points = 60 },
    new Student() { StudentID = 3, StudentName = "Bill", StandardID =2, Points = 61 },
    new Student() { StudentID = 4, StudentName = "Ram",  StandardID =2, Points = 99 },
    new Student() { StudentID = 5, StudentName = "Ron", Points = 10 }
};


void Main()
{
    Student.sc = scoringList;
    studentList.ForEach(f => f.Grade = scoringList.Find(w => w.minScale < f.Points && w.maxScale > f.Points).Grade);
}
公开课评分
{
public int minScale{get;set;}
public int maxScale{get;set;}
公共字符串等级{get;set;}
}
公立班学生
{
公共int StudentID{get;set;}
公共字符串StudentName{get;set;}
公共int标准ID{get;set;}
公共整数点{get;set;}
公共字符串等级{get;set;}
公共静态列表sc{get;set;}
公共字符串
{
得到
{
返回sc?.Find(w=>w.minScalePoints);
}
}
}
var scoringList=新列表
{
新评分{maxScale=100,minScale=85,Grade=“A”},
新评分{maxScale=84,minScale=70,Grade=“B”},
新评分{maxScale=69,minScale=50,Grade=“C”},
新评分{maxScale=49,minScale=40,Grade=“D”},
新评分{maxScale=39,minScale=25,Grade=“E”},
新评分{maxScale=24,minScale=0,Grade=“F”},
};
var studentList=新列表()
{
new Student(){StudentID=1,StudentName=“John”,StandardID=1,Points=88},
new Student(){StudentID=2,StudentName=“Moin”,StandardID=1,Points=60},
new Student(){StudentID=3,StudentName=“Bill”,StandardID=2,Points=61},
new Student(){StudentID=4,StudentName=“Ram”,StandardID=2,Points=99},
new Student(){StudentID=5,StudentName=“Ron”,Points=10}
};
void Main()
{
Student.sc=蔑视名单;
ForEach(f=>f.Grade=scoringList.Find(w=>w.minScalef.Points.Grade);
}

因为等级是与学生实体严格相关的属性,所以逻辑应该放在学生类中。例如,在gradelinq属性中设计学生实体会生成更易于阅读和维护的代码。
一旦需要使用grade属性,您也不会污染数据管理操作中的业务核心逻辑。

btw.Find和.ForEach是列表方法。我没有看到任何LINQ方法