在EntityFramework查询中将字符串类型转换为DateTime

时间:2013-12-18 14:14:20

标签: winforms linq entity-framework datetime

数据库中的我的日期字段保存在nvarchar(10)中。我希望将两个日期的对象放在一起 这是我的代码:

public bool SalesFactorIsExist(IFeeKindDTO inFeeKindDTO)
{
    bool isExist = false;

    int count = 0;
    var context = new SabzNegar01Entities1();
    try
    {
        count = (from p in context.tbl_SalesFactor_D
                 where p.tbl_SalesFactor_M.tbl_Customer.CustomerGroupCode ==   inFeeKindDTO.CustomerGroupCode && p.StockCode == inFeeKindDTO.StockCode && ConvertStringDate(p.tbl_SalesFactor_M.FactorSalesDate) >=  ConvertStringDate(inFeeKindDTO.StartDate)
                 select new { p.Row }).Count();
        if (count != 0)
        {
            isExist = true;
        }
}
catch (Exception ex)
{
    PMessageBox.Show("خطا در خواندن اطلاعات", "اخطار", PMessageBoxButtons.Ok,   PMessageBoxIcons.Error);
}

    return isExist;
}

我使用过这种方法:

private DateTime ConvertStringDate(string inDate)
{
    DateTime result = DateTime.Parse(inDate);
    return result;
}

但是有一个错误:

LINQ to Entities does not recognize the method 'System.DateTime ConvertStringDate(System.String)' method, and this method cannot be translated into a store expression.

我该怎么办? 还有另一种方式吗?

1 个答案:

答案 0 :(得分:3)

您无法从实体查询中调用ConvertStringDate函数。

将初始列表拉到服务器,然后应用您的功能。

var list = context.tbl_SalesFactor_D.Where(p=> p.tbl_SalesFactor_M.tbl_Customer.CustomerGroupCode == inFeeKindDTO.CustomerGroupCode && p.StockCode == inFeeKindDTO.StockCode).ToList();

var count = list.Where(p=> ConvertStringDate(p.tbl_SalesFactor_M.FactorSalesDate) >= ConvertStringDate(inFeeKindDTO.StartDate)).Count();