2

我有一个名为 TradeNo 的 INT 字段,它可能包含 NULL 值。要求是在下拉菜单中显示“合约 ID”和括号中的“交易编号”,如果“交易编号”为空,则显示 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 转换为数据库函数?

4

1 回答 1

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");
}
于 2012-07-24T13:34:49.427 回答