除了要查询的表外,这两个查询是相同的。对我来说,简化此操作以消除重复代码的最佳方法是什么?
//These two queries are identical except for the table name
var values = //Check for analog values
from a in historianDB.tblActualValueFloats
where a.PointSliceID == pointSliceID
where a.UTCDateTime >= startDate && a.UTCDateTime < endDate.AddDays(1)
orderby a.UTCDateTime
select new Record(a.UTCDateTime.ToLocalTime(), a.ActualValue);
if (values.Count() == 0)//If no analog records exist, check for digital values.
{
values =
from a in historianDB.tblActualValueDigitals
where a.PointSliceID == pointSliceID
where a.UTCDateTime >= startDate && a.UTCDateTime < endDate.AddDays(1)
orderby a.UTCDateTime
select new Record(a.UTCDateTime.ToLocalTime(), a.ActualValue);
}
答案 0 :(得分:1)
除了可能使用联合然后在内存中对其进行排序之外,你不会比它们更简单得到它们,但代码会很难看。
你有一个非常干净的方法,记住表的架构确实略有不同。
我建议的唯一优化是不使用.Count()== 0,尝试使用.Any()。
这将转化为“存在”&#39;在SQL中,它比计数更有效,因为它一找到记录就会返回,而不是遍历表来计算它们。