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.
Я могу просто указать параметр длины, но это не динамический.
Кто-нибудь видел эту проблему или имел разрешение на нее?
Спасибо,
Ник
Ответы
Ответ 1
Самый простой способ сделать это, вероятно, состоит в том, чтобы выгрузить усилия преобразования на ваш сервер, а не контекст данных. Если вы разделили свой уровень данных с уровня представления, это произойдет автоматически. Но для простоты я просто придерживаюсь вашей текущей архитектуры:
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();
Ответ 2
Измените его на:
Value = SqlFunctions.StringConvert((double)status.Id).Trim(),
Ответ 3
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(),
Text = status.Name,
Selected = false
});
}
}
}
Ответ 4
Еще одна опция, которая работает с LINQ to Entities, заключается в выполнении конкатенации с неявным преобразованием типа, например Value = "" & status.Id
. Тем не менее, это вызовет проблемы, которые необходимо будет обработать, если вы хотите использовать множественную конкатенацию с помощью этого метода.