如何保持循环方式

时间:2013-05-16 19:14:28

标签: c# asp.net

我的数据库中存储了许多贷方。我应该说只有少量的贷方,所以我可以轻松地缓存数据,而不必进行查找。

但是,当客户申请贷款时,我希望每次都按照逻辑顺序对不同的贷方进行首次查询。例如:

贷款人A. 贷款人B. 贷方C

第一位客户再次查看贷方A,第二客户B,第三客户C,第四客户A.

这背后的原因仅仅是在贷方之间平均分配线索,如果计数器每天重置一次,那就不会是世界末日。

显然,我可以将这些信息写入数据库 - 但这有点过分吗?其他人需要实现类似的东西,并提出一个更简单的解决方案吗?

任何建议表示赞赏。

6 个答案:

答案 0 :(得分:3)

由于这一切都存储在数据库中,您可以添加一个列,将其命名为 LastUsed ,您可以在其中存储日期/时间,然后您的查询将只是获取最早的日期,应该返回给您下一个要使用的行,所以你的数据看起来像这样

  • 贷方A,LastUsed = 2013-05-10 5:30 pm
  • Lender B,LastUsed = 2013-05-15 4:15 pm
  • Lender C,LastUsed = 2013-05-16 2:00 am
  • Lender D,LastUsed = 2013-04-20 11:00 am
  • Lender E,LastUsed = 2013-05-01 5:00 pm

通过制作您的查询以选择最早的日期,您将获得D,并且一旦使用您使用今天的日期更新,那么接下来将是E,依此类推

答案 1 :(得分:2)

为了确保后续作业不是随机完成的,并按照逻辑顺序完成,您确定您需要将之前的受让人存储在某处。

基本上我要做的是在数据库中有一个名为“AssignedTo”的列,对于每个赋值,我会检查该列,然后将新的引导分配给下一个逻辑受让人。

答案 2 :(得分:1)

这太过分了。

我不知道你的情况(将使用程序的地方,数据库的位置等等。) 您应该使用xml文件来存储此信息。我会说你给他们一天的客户数量,然后总是拿一个最优先的客户。

<Lenders> 
   <LenderA Clients = "5", Priority = "1"> Jim </LenderA>
   <LenderB Clients = "4", Priority = "2"> Jim </LenderA>
   <LenderC Clients = "4", Priority = "3"> Jim </LenderA>
</Lenders>

在这种情况下,程序知道他不能选择

  • LenderA因为他有更多的客户。
  • LenderC,因为他拥有与LenderB一样多的客户,但优先级较低。

如果您在我推荐之前从未使用过XML,那么请阅读XmlDocument以了解如何声明文档,并XPath来检索所需的节点。

答案 3 :(得分:1)

我会保留一份已使用的贷方清单,然后根据第一个清单筛选所有贷方,这样您就只能获得尚未登陆的贷方。当所有贷方的清单等于使用的贷方时,清除它并重新开始。您可以轻松地在linq中执行此操作:Where(x => !UsedLenders.Contains(x))

答案 4 :(得分:1)

如果您存储了一个包含DateTime最后一个贷方的额外列,您可以修改贷方选择查询以返回最长时间之前选择的贷方。即,类似于:Lenders.OrderBy(x => x.LastSelected).First()

当然,当选择贷方时,您还必须回写数据库。除非你在一个SQL查询中完成了所有这些操作。这样的东西有效(编辑:刚验证 - 效果很好):

UPDATE MyTable
SET LastSelected = GetDate()
OUTPUT INSERTED.*
WHERE Id = (SELECT TOP (1) Id FROM MyTable ORDER BY LastSelected)

答案 5 :(得分:1)

如果有任何记录插入数据库供客户访问,则选择该记录的ID,并使零基索引等于ID mod N的贷方,其中N是贷方的数量。

此方法有时用于简单的广告旋转器。由于ID值按顺序递增并独立地形成数据中的所有其他更改,因此您可以保证所有贷方将被均匀访问,并且客户将以严格的循环顺序发送给贷方。

异常是指稍后回滚某个ID值作为事务的一部分,但这个简单的解决方案假设回滚次数通常接近于零。