我正在尝试使用不同的参数过滤我的记录。但是当我必须过滤在30,60或90天内到期的物品的记录时,我得到一个例外。
这是我的代码:
public IQueryable<Stock> FilterStocks(StockSearchVM searchModel)
{
var result = db.Stocks.AsQueryable();
if (searchModel != null)
{
if (!string.IsNullOrWhiteSpace(searchModel.batch))
result = result.Where(x => x.BatchNo == searchModel.batch);
if (!string.IsNullOrEmpty(searchModel.name))
result = result.Where(x => x.Item.Name.Contains(searchModel.name));
if (!string.IsNullOrEmpty(searchModel.option))
{
if (searchModel.option == "BelowMin")
{
result = result.Where(x => x.Qty < x.Item.AlertQty);
}
else if (searchModel.option == "UnSold")
{
result = result.Where(x => x.Qty == x.InitialQty);
}
else if(searchModel.option == "90")
{
result = result.Where(x => ( Convert.ToDateTime(x.ExpiryDate) - DateTime.Now).Days < 90);
}
else if (searchModel.option == "60")
{
result = result.Where(x => (Convert.ToDateTime(x.ExpiryDate) - DateTime.Now).Days < 60);
}
else if (searchModel.option == "30")
{
result = result.Where(x => (Convert.ToDateTime(x.ExpiryDate) - DateTime.Now).Days < 30);
}
else if (searchModel.option == "15")
{
result = result.Where(x => (Convert.ToDateTime(x.ExpiryDate) - DateTime.Now).Days < 15);
}
else if (searchModel.option == "Expired")
{
result = result.Where(x => (Convert.ToDateTime(x.ExpiryDate) - DateTime.Now).Days < 0);
}
}
if ((searchModel.fromDate != null) || (searchModel.toDate != null))
{
if (searchModel.fromDate != null && searchModel.toDate == null)
{
result = result.Where(x => x.ExpiryDate > searchModel.fromDate);
}
if (searchModel.toDate != null && searchModel.fromDate == null)
{
result = result.Where(x => x.ExpiryDate < searchModel.toDate);
}
if (searchModel.toDate != null && searchModel.fromDate != null)
{
result = result.Where(x => (x.ExpiryDate > searchModel.fromDate && x.ExpiryDate < searchModel.toDate));
}
}
}
return result;
}
和异常我得到:
LINQ to Entities无法识别方法&#39; System.DateTime ToDateTime(System.Object的)&#39;方法,这个方法不能 翻译成商店表达。
我也尝试使用: EntityFunctions.DiffDays ,但这也没有用。
result = result.Where(x => EntityFunctions.DiffDays(Convert.ToDateTime(x.ExpiryDate), DateTime.Now) < 60);
请帮帮我。