我有以下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'
该表包含一年和一月的列,我根据两个已知的DateTimes(一个句点)查询该表。
该查询旨在根据两个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"
};
答案 0 :(得分:1)
请尝试以下操作:
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; }
}
答案 1 :(得分:1)
如果您在表格列上使用DATEFROMPARTS
,那么您已经失去了索引在数据库方面有用的任何机会 - 所以我建议您在整个月内工作。 1
(year * 12) + months
是一个简单的计算,您可以使用表列和要查询的任何起点/终点执行,然后您可以执行简单的int范围检查。
1 或者,如果您还没有意识到这会拒绝任何索引功能,您可能需要考虑添加计算列您应用索引的情况 - 在这种情况下,列定义将使用该函数(我在此处给出的总月计算或原始DATEFROMPARTS
一个),然后您可以轻松地查询该列。