我有一个SQL数据库,一旦构建,我将通过LINQ与之交互。 它有一个客户端(忽略其他人)两个表的两个fkID字段。
班级国家
我要做的是存储“规则”表,其中发生以下情况:
if the Class is 'A' and the Country is 'USA' then
create rows 'RowsA' in table todo
else if the class is 'A' and the country is not 'USA' then
create rows 'RowsB' in table todo
else
create rows 'RowsC' in table todo
因此,这是在规则表中执行此操作的最佳方式
RuleID Identity
ClassFK Int null
CountryFK Int null
订单 int not null
并让我的C#代码执行以下操作:
var rules = from r in db.Rules
orderby r.order
select r;
foreach(rule in rules)
{
if (((client.ClassFK == rule.ClassFK) || (rule.ClassFK == null)) &&
((client.CountryFK== rule.CountryFK) || (rule.CountryFK== null)))
{
// Create The Rows
}
}
这对我来说似乎非常脆弱
答案 0 :(得分:1)
让我觉得它看起来更干净的一种方法我认为是在Rule类上创建一个方法来检查它是否适用于客户端;这使您的代码看起来像:
foreach(rule in rules.Where(r => r.AppliesTo(client)))
{
// Create the Rows
}
但是,我看到缺少的部分是根据特定规则知道要创建的行;这不包含在您的规则表中。