简化对具有相同结构的两个表的查询
本文关键字:两个 查询 结构 | 更新日期: 2023-09-27 18:31:52
除了要查询的表外,这两个查询是相同的。简化此操作以消除重复代码的最佳方法是什么?
//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,尝试使用 .任意()。
这将转换为SQL中的"存在",这比计数更有效,因为它在找到记录后立即返回,而不是遍历表来计数它们。