我有一个表单视图模型类,用于填充选择列表以供我的视图使用。以下是创建SelectList的部分的摘录。问题是它的查找表包含2个其他键
var waterIndicatorValues = waterIndicator
.OrderBy(u => u.WaterIndicatorDescription)
.Select(u => new KeyValuePair<int, string>(u.WaterIndicatorId, u.WaterIndicatorDescription + " [" + u.UnitTypeId.ToString() + "] " + u.HazardTypeId.ToString()));
this.WaterIndicatorList = new SelectList(waterIndicatorValues, "Key", "Value", water.WaterIndicatorId);
我想要与那些Id相关联的文本描述,而不是UnitTypeId和HazardTypeId。所以我希望我的代码看起来像这样:
var waterIndicatorValues = waterIndicator
.OrderBy(u => u.WaterIndicatorDescription)
.Select(u => new KeyValuePair<int, string>(u.WaterIndicatorId, u.WaterIndicatorDescription + " [" + u.UnitTypeId.ToDescription() + "] " + u.HazardTypeId.ToDescription()));
this.WaterIndicatorList = new SelectList(waterIndicatorValues, "Key", "Value", water.WaterIndicatorId);
此代码返回错误“Method'System.String ToDescription(System.Enum)'没有支持的SQL转换。”
任何评论/帮助非常感谢
UnitTypeId的ENUM:
using System.ComponentModel;
namespace Emas.Model.Enumerations
{
/// <summary>
/// Defines the Unit Types.
/// </summary>
public enum UnitType
{
[Description("- Please Select -")]
Blank = 0,
[Description("kWh")]
kWh = 1,
[Description("m3")]
m3 = 2,
[Description("litres")]
litres = 3,
[Description("Kg")]
Kg = 4,
[Description("Unit(s)")]
Unit = 5,
}
}
答案 0 :(得分:1)
您无法在LINQ中使用从数据库中提取数据的扩展方法,因为它无法将此扩展代码转换为SQL。但是,您可以使用ToArray()
或ToList()
来触发数据库命中,然后在结果中使用扩展方法代替内存。
更新
根据您在更新的代码中尝试实现的目标,我认为this article可能会得到您需要的答案。当然,你也需要转换为枚举类型。
更新2:
在使用扩展名进行选择之前,使用ToList()
转换为内存应该可以正常工作:
var waterIndicatorValues = waterIndicator
.OrderBy(u => u.WaterIndicatorDescription)
.ToList()
.Select(u => new KeyValuePair<int, string>(u.WaterIndicatorId, u.WaterIndicatorDescription + " [" + u.UnitTypeId.ToDescription() + "] " + u.HazardTypeId.ToDescription()));
this.WaterIndicatorList = new SelectList(waterIndicatorValues, "Key", "Value", water.WaterIndicatorId);