DataTable Compute Rows基于MonthTime从DateTime列返回

时间:2018-04-14 14:45:08

标签: c# datetime datatables

我正在尝试从我的一个DataTable返回行计数。通常它很容易,我已经做了很多次。但这个独特的案例让我感到不安。我需要根据DateTime列返回行计数,但是基于月份作为其过滤器。这就是我目前失败的原因。

movies = {

2005: ['Munich', 'Steven Spielberg'],
2006: ['The Prestige', 'Christopher Nolan'],
2006: ['The Departed', 'Martin Scorsese'],
2007: ['Into the Wild', 'Sean Penn'],
2008: ['The Dark Knight', 'Christopher Nolan'],
2009: ['Mary and Max', 'Adam Elliot'],
2010: ['The King\"s Speech', 'Tom Hooper'],
2011: ['The Artist', 'Michel Hazanavicius'],
2011: ['The Help', 'Tate Taylor'],
2012: ['Argo', 'Ben Affleck'],
2013: ['12 Years a Slave', 'Steve McQueen'],
2014: ['Birdman', 'Alejandro G. Inarritu'],
2015: ['Spotlight', 'Tom McCarthy'],
2016: ['The BFG', 'Steven Spielberg']

}

userInput = int(input('Enter a year between 2005 and 2016: \n'))

print(movies[userInput])

除此之外,我还尝试了LINQ方法 - 遗憾的是它没有给我任何结果。以下是我试过的LINQ。

sickLCount = Convert.ToInt32(LeaveDays.Compute("COUNT(EmployeeID)", "LeaveType = 0 AND month(Date) = "+ startDate.Value.Month + ""));

2 个答案:

答案 0 :(得分:0)

.Field("Date")替换为.Field<DateTime>("Date")

您也可以使用Count代替Where:

进行整合
LeaveDays.AsEnumerable().Count(r => r.Field<DateTime>("Date").Month == startDate.Value.Month);

答案 1 :(得分:0)

我认为主要问题是在数据表中使用名为month()的函数。

如果您的数据存储在数据库中,则可以轻松调用month()功能。但是你的数据库中的数据不再是而不是,它现在就在你的数据表中。您无法在数据表中运行数据库查询功能。

我的建议是,将您的月份作为不同的列 - 请说Months - 并使用您的startDate.Value.Month值过滤 列。

Compute方法中的“过滤器”遵循DataColumn.Expression property规则。您可能需要查看更多详细信息。