根据LINQ中的优先级过滤数据

时间:2018-03-15 12:18:46

标签: sql asp.net linq filtering

我的费率表中的字段是Route,VehicleMasterId,VehicleType,Material,Client,UnitRate等。

我必须获取单行的优先顺序是:VehicleNo>路线>客户> VehicleType,Material

假设我有2行具有相同的数据,除了1有客户端和车辆类型,另一行有VehicleNo.Then根据我的优先级,我应该选择与VehicleNo的行的速率。

要执行此操作在linq中,我首先选择了具有匹配数据的所有行。这是我的代码。

public RateMasterDataModel GetRateMasterforCn(Consignment cn){

// I will always pass all the above fields in cn

var rateMaster = (from rate in Context.RateMaster
                  where rate.FromDate <= cn.Cndate
                  && rate.ToDate >= cn.Cndate
                  && (rate.VehicleTypeId != null ? rate.VehicleTypeId == cn.VehicleTypeId : true)
                  && (rate.VehicleMasterId != null ? rate.VehicleMasterId == cn.VehicleMasterId : true)
                  && (rate.ClientId != null ? rate.ClientId == cn.ClientId : true)
                  && (rate.RouteId != null ? rate.RouteId == cn.RouteId : true)
                  && (rate.MaterialMasterId != null ? rate.MaterialMasterId == cn.MaterialMasterId : true)
                          select new RateMasterDataModel
                          {
                              RateMasterId = rate.RateMasterId,
                              FromDate = rate.FromDate,
                              ToDate = rate.ToDate,
                              ClientId = rate.ClientId ,
                              VehicleMasterId = rate.VehicleMasterId,
                              VehicleTypeId = rate.VehicleTypeId,
                              MaterialMasterId = rate.MaterialMasterId,
                              UnitRate = rate.UnitRate,
                              LoadTypeId = rate.LoadTypeId,
                              LoadingPointId = rate.RouteId,
                              CalculationMasterId = rate.CalculationMasterId
                          }).ToList();
}

请在此之后建议如何过滤。

2 个答案:

答案 0 :(得分:1)

您可以使用以下代码获取VehicleNo&gt;所订购的记录。路线

.ThenBy()

根据列要求添加多个{{1}}子句以对数据进行排序。

答案 1 :(得分:0)

你的意思是说,如果没有vehicalno的行。填充然后必须选择具有Route的行。它是否正确?