2012-07-24 77 views
2

我有一個名爲TradeNo的INT字段,它可能包含NULL值。要求是在下拉菜單中顯示「合約編號」和「交易編號」,如果「交易編號」爲空,則顯示N/A。LINQ&Entity Framework:連接NULL值的問題

Example: 
44444 (2222) 
55555 (N/A) 

這是我認爲會工作。這是我的函數返回的SelectList

public IEnumerable<SelectListItem> GetContractsBySupplierDropDown(string supplier) 
{ 
    var result = from c in context.Contracts 
        where c.Supplier==supplier 
        orderby c.ContractID 
        select new { 
          Text = c.ContractID.ToString() + " (" + 
            (c.TradeNo.HasValue ? 
             c.TradeNo.Value.ToString() : 
             " N/A ").ToString() + 
            ")", 
          Value = c.ContractID }; 

    return new SelectList(result, "Text", "Value"); 
} 

的誤差爲回報:

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

從我所知道的,顯示的錯誤意味着EF正在努力的ToString轉換爲數據庫的功能?

回答

2

不幸的是,您不能在來自數據庫的數字字段中使用ToString

作爲一個工作,你可以在執行之前先施放ToList,然後內容就在內存中。

public IEnumerable<SelectListItem> GetContractsBySupplierDropDown(string supplier) 
{ 
    var query = from c in context.Contracts 
       where c.Supplier==supplier 
       orderby c.ContractID 
       select new { 
        c.ContractID, 
        c.TradeNo, 

       }; 
    var result = from c in query.ToList() 
       select new { 
          Text = c.ContractID.ToString() + " (" + 
            (c.TradeNo.HasValue ? 
             c.TradeNo.Value.ToString() : 
             " N/A ") + 
            ")", 
          Value = c.ContractID 
        }; 

    return new SelectList(result, "Text", "Value"); 
} 
+1

我真的很喜歡這種方法,謝謝Schiavini! – gmang 2012-07-24 13:39:33