簡體   English   中英

在C#Linq中使用T-SQL DATEFROMPARTS()

[英]Using T-SQL DATEFROMPARTS() in C# Linq

我嘗試將以下T-SQL查詢轉換為C#代碼:

SELECT 
    *, DATEFROMPARTS(Jaar, Maand, 1) 
FROM 
    EAN_Budget_Meetdata_Factuur
WHERE
    EID = 1 AND
    Bron = 'B' AND
    DATEFROMPARTS(Jaar, Maand, 1)  BETWEEN '20161101' AND '20170101' 

該表包含一列Year和Month,我正在基於兩個已知的DateTime(一個句點)查詢該表。

該查詢用於根據兩個DateTime之間的年和月來檢索適用於此時間段的表行。

將查詢轉換為C#的最佳方法是什么? 到目前為止,我沒有提出以下建議:

var query = from b in CT2.EAN_Budget_Meetdata_Factuur
            let JaarTest = b.Jaar + "-" + b.Maand + "-01"
            where 
                b.EID == 1 &&
                b.Bron == "B" &&
                JaarTest == "something"
                select new
                {
                    JaarTest = b.Jaar + "-" + b.Maand + "-01"
                };

嘗試以下操作:

    class Program
    {
        static void Main(string[] args)
        {
            var query = EAN_Budget_Meetdata_Factuur.factuurs
                    .Where(x => (x.eid == 1) && (x.bron == "B") && (x.date >= new DateTime(2016, 11, 1)) && (x.date <= new DateTime(2017, 1, 1)))
                    .Select(x => new { eid = x.eid, bron = x.bron, date = x.date })
                    .ToList();
        }
    }
    public class EAN_Budget_Meetdata_Factuur
    {
        public static List<EAN_Budget_Meetdata_Factuur> factuurs = new List<EAN_Budget_Meetdata_Factuur>();

        public int eid { get; set; }
        public string bron { get; set; }
        public DateTime date { get; set; }
    }

如果您在表列上使用DATEFROMPARTS ,那么您已經失去了使索引在數據庫端有用的機會-因此,我建議您DATEFROMPARTS幾個月的時間。 1個

(year * 12) + months是一個簡單的計算,您可以對表列以及要查詢的任何起點/終點進行計算,然后可以執行簡單的int范圍檢查。


1或者,如果您沒有意識到這將拒絕您建立任何索引功能,則可能要考慮添加一個在其上應用索引的計算列 -在這種情況下,列定義將使用該函數(我在這里給出的總月數計算或原始DATEFROMPARTS ),然后您可以輕松地查詢該列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM