2014-10-08 40 views
0

我已经看到了其他职位,如何筛选使用“<”“=”条件表中的记录,但我想用mysql内置的功能,如,过滤DataTable中的记录与选择查询使用MYSQL内置功能

日期,年周

datatable table; //--> it contains my result 

    DataRow[] foutput = table.Select("YEARWEEK(Date) = 'YEARWEEK(CURRENT_DATE)'"); 

    gvweeksch.DataSource = foutput; 
    gvweeksch.DataBind(); 
+0

那么,是什么问题?这不行?任何异常或错误信息? – 2014-10-08 07:58:09

+0

YEARWEEK - >未找到错误 – BeginnerStack1 2014-10-08 08:37:16

回答

1

您不能在只支持很少方法的DataTable中使用数据库函数。看看表达式的语法在下面链接查看什么是支持:

http://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression(v=vs.110).aspx

注意,一个DataTable只是在内存中的保藏不知道数据的来源。它既不相关也不与数据库链接。

如果你想和喜欢,你拥有所有的.NET方法,你应该使用Linq-To-DataTable而不是一年的一周复杂条件来过滤表:

DateTimeFormatInfo dfi = DateTimeFormatInfo.CurrentInfo; 
Calendar cal = dfi.Calendar; 
int week = cal.GetWeekOfYear(DateTime.Today, dfi.CalendarWeekRule, dfi.FirstDayOfWeek); 
var rowsFiltered = from row in table.AsEnumerable() 
        let date = row.Field<DateTime>("Date") 
        where date.Year == DateTime.Today.Year 
        && week == cal.GetWeekOfYear(date, dfi.CalendarWeekRule, dfi.FirstDayOfWeek) 
        select row; 
DataTable tblFiltered = table.Clone(); // empty table with same columns 
foreach (DataRow row in rowsFiltered) 
    tblFiltered.ImportRow(row); 
gvweeksch.DataSource = tblFiltered; 
gvweeksch.DataBind(); 
+0

由于“源不包含DataRows”而出现错误。 – BeginnerStack1 2014-10-08 09:02:04

+0

@ BeginnerStack1:然后过滤器不返回任何行。我编辑了我的答案。 – 2014-10-08 09:23:36