首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理前检查所有条件

处理前检查所有条件
EN

Stack Overflow用户
提问于 2013-08-02 18:12:15
回答 1查看 136关注 0票数 0

背景:

我正在建立一个系统,根据学生的特点和导师的接受程度,为大学生分配学术顾问。现在,我想检查一下,在我开始处理学生并提交对我们的CRM和Active Directory的更改之前,是否可以为每个可能的学生分配一个顾问。大约有15,000份记录,所以我不想修改,除非所有的学生都有一个导师。

我的当前系统有一个“AdvisorGroup”对象,用于保存“AdvisorRules”的列表。我的“AdvisorRules”对象是从CRM中填充的:

代码语言:javascript
复制
class AdvisorRule
{
    public AdvisorCondition Condition { get; set; }
    public AdvisorField Field { get; set; }
    public String Value { get; set; }
}

AdvisorCondition可以是LessThanEqual、GreaterThanEqual或Equal。AdivsorField可以是信用(每个顾问将接受多少学分)、国际(如果顾问接受有意的学生)、荣誉(如果顾问接受荣誉学生或不接受)和lastName(顾问将接受姓氏)。

“‘Value”是与“AdvisorField”相比较的目标。例如,AdvisorRules在AdvisorGroup中的列表可以包含以下规则:

  1. AdvisorCondition =“相等”AdvisorField = "International“Value = No
  2. AdvisorCondition =“相等”AdvisorField =“荣誉”值= No
  3. AdvisorCondition = "LessThanEqual“AdvisorField = "Credit”值= 89
  4. AdvisorCondition =“相等”AdvisorField = "LastName“值=A
  5. AdvisorCondition =“相等”AdvisorField = "LastName“值=B

这位导师将接受一个姓A或B,学分少于89个学分的学生,而不是一个国际或优秀的学生。

问题:

在我开始处理之前,是否有一种检查方法来确保每个可能的学生都会被指派一位顾问?我试图在我的编码中不太明确。我在想类似的事情,但如果我能找到更好的方法,我就愿意重新设计:

代码语言:javascript
复制
    private bool checkRuleCoverage()
    {
        //somehow generate list of possible scenarios here
        foreach (possible scenario in list of possible scenarios)
        {
            bool covered = isCovered(possible scenario);
            if(!covered) {throw error  and return}
        }
    }

    private bool isCovered(List<AdvisorGroup> adGroups, possibleScenario ps)
    {
        foreach (AdvisorGroup advisor in adGroups)
        {
            foreach (AdvisorRule rule in advisor.rules)
            {
                if(advisor.rules == ps)
                    return true;
            }
        }
        return false;
    }
EN

回答 1

Stack Overflow用户

发布于 2013-08-02 18:52:03

如果您的所有学生记录都在数据库中,那么解决方案将是使用set逻辑和适当的索引来获得答案。例如,您可以编写自己的解决方案,以便按照顾问规则适用的每个可能值对学生进行排序。

然后,不进行迭代(尽管为了排序已经迭代过),您可以在某一列火车上找到x以下或y以上的所有学生,然后将其与在另一个stat上超出范围的学生进行比较,等等。在所有统计数据中,任何学生,如毛47的评论,都暗示这是不可取的。

当然,在用C#编写这段代码的时间里,您只需遍历顾问规则并找到范围的值,并将其应用到SQLServer或MySQL上的select或MySQL或任何基于集合的DB中的where子句。

当然,这种粗略的检查漏掉了部分规则集的可能性,其中一个学生超出了除一个顾问规则以外的所有规则的范围,而那一个规则是不够的,因为顾问也有其他的要求。为了解决这个问题,您必须有多个顾问规则集范围,或者更确切地说,在最坏的情况下,您将遍历所有的顾问规则。只要学生在规则上的分数被正确地编入索引,在DB中这样做可能还是可以的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18023539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档