我在MVC中有一个模板TimeSpan。
查看
@model TimeSpan?
@{
var id = "id" + Guid.NewGuid().ToString().Substring(0, 5);
string format = (string)(this.ViewData["format"] ?? @"hh\:mm\:ss");
IEnumerable<SelectListItem> listValues;
if (this.Model.HasValue)
{
listValues = from x in Enumerable.Range(0, 96)
.Select(x => new TimeSpan(9000000000 * x))
.Select(x => new SelectListItem {Selected = true, Value = x.ToString(),
Text = x.ToString(format) })
}
else
{
listValues = from x in Enumerable.Range(0, 96)
select new SelectListItem { Value = x.ToString(),
Text = x.ToString(format) };
}
}
<div class="field-small">
@Html.DropDownListFor(x => x, listValues, new { id = id})
</div>
<script type="text/javascript"">
$("#@id")
.turnAutoComplete();
</script>
但有异常
select子句中表达式的类型不正确。类型 在“选择”调用中推理失败。
和
查询正文必须以select子句或group子句结尾
线路错误
listValues = from x in Enumerable.Range(0, 96)
.Select(x => new TimeSpan(9000000000 * x))
.Select(x => new SelectListItem { Selected = true, Value = x.ToString(),
Text = x.ToString(format) })
我不知道如何确定我的行
有什么问题答案 0 :(得分:2)
您正在尝试将查询表达式语法与常规方法调用混合使用,并且您最终得到的内容不是完整的查询表达式。你可以使用:
listValues = from x in Enumerable.Range(0, 96)
let ts = new TimeSpan(9000000000 * x)
select new SelectListItem {
Selected = true,
Value = ts.ToString(),
Text = ts.ToString(format)
};
或者只是:
listValues = Enumerable.Range(0, 96)
.Select(x => new TimeSpan(9000000000 * x))
.Select(x => new SelectListItem {
Selected = true,
Value = x.ToString(),
Text = x.ToString(format)
});
答案 1 :(得分:0)
一旦开始使用&#34;来自&#34;的查询表达式语法,您还必须使用&#34;选择&#34;而不是.Select()。
您可以使用&#34; let&#34;
执行您想要的操作(计算TimeSpan一次,然后使用它两次) listValues = (from x in Enumerable.Range(0, 96)
let ts = new TimeSpan(9000000000 * x)
select new SelectListItem
{
Selected = true,
Value = ts.ToString(),
Text = ts.ToString(format)
});
);