我需要根据车辆编号获取车辆类型。我需要根据另一列从列表中选择特定的列。
这是我的代码:
protected void ddVehicleNo_SelectedIndexChanged(object sender, EventArgs e)
{
List<Exp_VehicleDTO> odata = (List<Exp_VehicleDTO>)Session["VehicleDTO"];
var vehityeps=odata.Select(x=>x.VehicleNo.Contains(x.VehicleType.Equals(Convert.ToInt32(ddVehicleNo.SelectedValue))))
}
此代码会导致错误“针对“ string.contains(string)”的最佳重载方法匹配具有一些无效的参数”。
Exp_vehicleDTO类
public class Exp_VehicleDTO
{
public int CompanyId { get; set; }
public int VehicleId { get; set; }
public int VehicleType { get; set; }
public string VehicleNo { get; set; }
public int Status { get; set; }
public DateTime CreatedDateTime { get; set; }
public string CreatedBy { get; set; }
public string CreatedMachine { get; set; }
}
答案 0 :(得分:3)
您可以像这样获得车辆类型:
int vehicleType = odata.Single(x => x.VehicleNo.Equals(ddVehicleNo.SelectedValue)).VehicleType;
Single
将采用与条件匹配的第一项。请注意,如果找不到该项目或存在多个匹配项目,它将引发异常。
如果要处理找不到项目的情况,可以执行以下操作:
var vehicle = odata.SingleOrDefault(x => x.VehicleNo.Equals(ddVehicleNo.SelectedValue));
if (vehicle != null)
{
var vehicleType = vehicle.VehicleType;
}
else
{
// set combobox's SelectedIndex to -1
}
答案 1 :(得分:0)
在不知道收到什么错误的情况下很难提供帮助,但是尝试将代码更改为此:
protected void ddVehicleNo_SelectedIndexChanged(object sender, EventArgs e)
{
List<Exp_VehicleDTO> odata = (List<Exp_VehicleDTO>)Session["VehicleDTO"];
var vehityeps = odata
.Where(v => v.VehicleNo.ToString() == ddVehicleNo.SelectedValue)
.Select(v => v.VehicleType);
}
应该用所有vehityeps
填充VehicleType
,其中VehicleNo
等于用户在ddVehicleNo
下拉菜单中选择的内容。
已更新
我不确定Exp_VehicleDTO
使用的是哪种类型,但我猜VehicleNo
是int
。为了我的解决方案安全起见,这会将值作为字符串进行比较。