Linq 林氏;实体框架:连接空值的问题

Linq 林氏;实体框架:连接空值的问题,linq,entity-framework,Linq,Entity Framework,我有一个名为TradeNo的INT字段,它可能包含空值。要求在下拉列表中显示括号中的“合同Id”和“交易编号”,如果“交易编号”为空,则显示N/A Example: 44444 (2222) 55555 ( N/A ) 以下是我认为有效的方法。这是我返回SelectList的函数 public IEnumerable<SelectListItem> GetContractsBySupplierDropDown(string supplier) { var result =

我有一个名为TradeNo的INT字段,它可能包含空值。要求在下拉列表中显示括号中的“合同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"); 
}

据我所知,显示的错误意味着EF正在尝试将ToString转换为数据库函数?

不幸的是,您不能在来自数据库的数字字段中使用
ToString

作为一种变通方法,您可以在执行此操作之前将
转换为列表
,这样内容就会存储在内存中

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");
}
public IEnumerable GetContractsbySupplier下拉列表(字符串供应商)
{
var query=来自context.Contracts中的c
其中c.Supplier==供应商
orderby c.constractd
选择新的{
c、 收缩,
c、 贸易号,
};
var result=来自query.ToList()中的c
选择新{
Text=c.construcd.ToString()+”(“+
(c.TradeNo.HasValue?
c、 TradeNo.Value.ToString():
“不适用”)+
" )", 
值=c.d
};
返回新的SelectList(结果、“文本”、“值”);
}
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");
}