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

时间:2014-11-25 20:15:32

标签: c# sql linq entity-framework linq-to-sql

除了要查询的表外,这两个查询是相同的。对我来说,简化此操作以消除重复代码的最佳方法是什么?

        //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);
        }

1 个答案:

答案 0 :(得分:1)

除了可能使用联合然后在内存中对其进行排序之外,你不会比它们更简单得到它们,但代码会很难看。

你有一个非常干净的方法,记住表的架构确实略有不同。

我建议的唯一优化是不使用.Count()== 0,尝试使用.Any()。

这将转化为“存在”&#39;在SQL中,它比计数更有效,因为它一找到记录就会返回,而不是遍历表来计算它们。