带日期时间的动态 LINQ
Dynamic LINQ with datetime
我正在尝试编写一个简单的 linq select 查询,其中 where 子句中的值取自文本框。我在日期时间值的情况下遇到问题。现在这有效了:
var rawData = contextSearch.GetType().GetProperty(TableName).GetValue(contextSearch, null);
truncatedData = ((IQueryable<object>)rawData).Where(columnName + ">=@0", DateTime.Parse(txtCrudSearch.Text)).ToList();
这也适用于 <=,但我需要准确找到给定日期的记录。所以,当我尝试这个时:
truncatedData = ((IQueryable<object>)rawData).Where(columnName + "=@0", DateTime.Parse(txtCrudSearch.Text)).ToList();
没用。为什么?我怎样才能让它工作?仅供参考:列名是从组合框中动态获取的,我正在使用 entity framework。
如果您只想比较日期而忽略时间,试试这个:
var parsedDt = DateTime.Parse(txtCrudSearch.Text);
var nextDay = parsedDt.AddDays(1);
truncatedData = ((IQueryable<object>)rawData)
.Where(columnName + ">= @0 && " + columnName + " < @1", parsedDt, nextDay)
.ToList();
(此方案基于@algreat answer)
我正在尝试编写一个简单的 linq select 查询,其中 where 子句中的值取自文本框。我在日期时间值的情况下遇到问题。现在这有效了:
var rawData = contextSearch.GetType().GetProperty(TableName).GetValue(contextSearch, null);
truncatedData = ((IQueryable<object>)rawData).Where(columnName + ">=@0", DateTime.Parse(txtCrudSearch.Text)).ToList();
这也适用于 <=,但我需要准确找到给定日期的记录。所以,当我尝试这个时:
truncatedData = ((IQueryable<object>)rawData).Where(columnName + "=@0", DateTime.Parse(txtCrudSearch.Text)).ToList();
没用。为什么?我怎样才能让它工作?仅供参考:列名是从组合框中动态获取的,我正在使用 entity framework。
如果您只想比较日期而忽略时间,试试这个:
var parsedDt = DateTime.Parse(txtCrudSearch.Text);
var nextDay = parsedDt.AddDays(1);
truncatedData = ((IQueryable<object>)rawData)
.Where(columnName + ">= @0 && " + columnName + " < @1", parsedDt, nextDay)
.ToList();
(此方案基于@algreat answer)