[英]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.