SqlFunctions.StringConvert添加了不必要的填充

问题描述

| 在我的ViewModel中,我将为下拉列表返回以下内容:
public IEnumerable<SelectListItem> Statuses
    {
        get
        {
            using (var context = new AssetManager.Models.AssetManagerEntities())
            {
                var query = from status in context.AssetStatuses
                            where status.Reserved != true
                            select new SelectListItem()
                                       {
                                           Value = SqlFunctions.StringConvert((double)status.Id),Text = status.Name,Selected = false
                                       };

                return query.ToList();
            }
        }
    }
然后在我看来,它有点像这样:
 @Html.DropDownListFor(model => model.Status,(IEnumerable<SelectListItem>)Model.Statuses)
一切正常,除了SqlFunctions.StringConvert,默认情况下使字符串的长度为10,所以我最终在html中得到了以下结果:
<option value=\"         7\">Free to loan</option>
注意值字段中的间距。这是一个问题,因为我的ViewModel要求此字段为int。 我可以简单地指定length参数,但这不是动态的。 有没有人看过这个问题,或者有解决方案? 谢谢, 缺口     

解决方法

        更新资料 蒂姆下面的答案比这是一个更好的解决方案,但是我无法删除已接受的答案,并且OP没有响应我接受他的答案的请求。 原始答案 最简单的方法可能是将转换工作转移到服务器上,而不是数据上下文上。如果您将数据层与表示层分开,则会自动发生。但是为了简单起见,我将坚持使用您当前的体系结构:
            var query = from status in context.AssetStatuses
                        where !status.Reserved
                        select new 
                                   {
                                       status.Id,status.Name
                                   };
            return query.AsEnumerable()
                .Select(status => new SelectListItem
                                   {
                                       Value = status.Id.ToString(),Text = status.Name,Selected = false
                                   })
                .ToList();
    ,        更改为:
Value = SqlFunctions.StringConvert((double)status.Id).Trim(),
    ,        
public IEnumerable<SelectListItem> Statuses
{
    get
    {
        using (var context = new AssetManager.Models.AssetManagerEntities())
        {
            return  (from status in context.AssetStatuses.ToList()
                        where status.Reserved != true
                        select new SelectListItem()
                                   {
                                       Value = status.Id.ToString(),Selected = false
                                   });

        }
    }
}
    ,        与LINQ to Entities一起使用的另一个选择是使用隐式类型转换(例如
Value = \"\" & status.Id
)进行串联。但是,如果要使用此方法使用多个串联,这将导致必须解决的问题。     

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...