LINQ 和实体框架:连接 NULL 值的问题



我有一个名为TradeNo的INT字段,它可能包含NULL值。要求在下拉列表中显示括号中的"合同Id"one_answers"交易号",如果"交易号"为空,则显示N/A。

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转换为数据库函数?

很遗憾,不能在来自数据库的数字字段中使用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");
}

最新更新