使用MYSQL INBUILT函数使用select查询过滤数据表记录

时间:2014-10-08 07:56:26

标签: c# mysql asp.net

我在其他帖子中看到过如何使用'<'过滤表记录'='条件,但我想使用mysql内置函数,如

日期,周年等,

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

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

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

1 个答案:

答案 0 :(得分:1)

您不能在仅使用少量方法的DataTable中使用数据库函数。在下面的链接中查看表达式语法以查看支持的内容:

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

请注意,DataTable只是一个内存中的集合,它甚至不知道数据的来源。它既不相关也不与数据库相关联。

如果要过滤具有复杂条件的表,例如一年中的一周,则应使用Linq-To-DataTable代替所有.NET方法:

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();