"var"最佳实践(算法帮助)



我正在使用Simple.data,答案不在前面提到的技术中,但有助于理解这一点。所以忽略语法等

我用一个简单的查询来查询数据库;但基于一组条件,查询将发生变化。

例如:(非常简单,可能5-10个条件)

     var result;
     if(LoggedAtSelected)
     {
      // Condition 1 - Calls Logged after a certain date
      result = db.Jobs.FindAll(db.Jobs.Logged_At >= startDate);
     }
     else 
     {
      // Condition 2 - Calls Closed after a certain date
      result = db.Jobs.FindAll(db.Jobs.Closed_At >= startDate && dd.Jobs.Closed_At <= endDate);
     }
     foreach(var JobRecord in result)
     {
     }

这是上面的理想代码,但遗憾的是,考虑到var的动态绑定和可变性质,这是不可能的。对于这种情况,最佳实践是什么?我唯一的想法是为每个条件写一个"var result=condition…",在if.else-if-.else中,在将其转换为该类型后将其分配给全局变量;然后在"foreach"中使用。听起来工作量很大。有什么想法吗?或者就是这样!!!?!!!

代替:

var result;

使用db.Jobs.FindAll:返回的实际类型

IEnumerable<Job> result;

只有当编译器能够准确地知道要使用哪种类型(或者如何为您定义新类型)时,才能使用var。

在你的情况下,你可以用这样的类型来定义它

List<Job> result;

或者调用构造函数返回一个实例:

var result = new List<Job>;

(当然,您的查询将返回一个IEnumculable实例,而不是List,我只是用List作为示例,因为您无法实例化枚举。)

注意,如果if语句决定的是查询的过滤器,而不是查询本身,那么您可能需要在那里构建一个SimpleExpression,然后运行查询。例如

var whereCLause;
if(LoggedAtSelected)
{
  // Condition 1 - Calls Logged after a certain date
  whereClause = db.Jobs.Logged_At >= startDate;
}
else 
{
  // Condition 2 - Calls Closed after a certain date
  whereClause = db.Jobs.Closed_At >= startDate && dd.Jobs.Closed_At <= endDate;
}
List<Job> results = db.Jobs.All.Where(whereClause);
foreach(Job record in results)
{
  ...
}

相关内容

  • 没有找到相关文章

最新更新