使用LINQ的Where从列表中选择

时间:2018-09-12 06:44:51

标签: c# linq

我需要根据车辆编号获取车辆类型。我需要根据另一列从列表中选择特定的列。

这是我的代码:

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; }
}

2 个答案:

答案 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使用的是哪种类型,但我猜VehicleNoint。为了我的解决方案安全起见,这会将值作为字符串进行比较。