我有一个名为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");
}