我正在使用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”中使用它。听起来很多工作。有任何想法吗?或者就是这样!!!?!!!
答案 0 :(得分:6)
而不是:
var result;
使用db.Jobs.FindAll
返回的实际类型:
IEnumerable<Job> result;
答案 1 :(得分:0)
如果编译器可以准确知道要使用哪种类型(或如何为您定义新类型),则只能使用var。
在您的情况下,您可以使用类型说明
来定义它List<Job> result;
或调用构造函数返回一个实例:
var result = new List<Job>;
(当然你的查询将返回一个IEnumarable实例而不是List,我只是使用List作为一个例子,因为你无法实例化一个枚举。)
答案 2 :(得分:0)
正如请注意,由于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)
{
...
}