简化对具有相同结构的两个表的查询

本文关键字:两个 查询 结构 | 更新日期: 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中的"存在",这比计数更有效,因为它在找到记录后立即返回,而不是遍历表来计数它们。