2013-12-18 93 views
1

在我的數據庫日期字段保存在爲nvarchar(10)。在這裏我想compaire兩個日期一起 這是我的代碼:中的EntityFramework查詢轉換字符串類型爲DateTime

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. 

我該怎麼辦? 還有別的辦法嗎?

+0

什麼是錯誤文本? – Maess

回答

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

非常感謝:) –

+2

@Alalesa記住,該解決方案將從'tbl_SalesFactor'(滿足前兩個條件)下載所有數據,將這些數據映射到您的實體,然後在客戶端過濾結果。如果它沒有達到性能或性能沒有必要,那麼這個解決方案是好的。否則,請考慮更改日期列的類型以保存日期數據而不是字符串 –

+0

是的,更好的解決方案是在數據庫中使用DateTime數據類型。 – Maess