documentNumber为string类型:
数据为:
201509001
201509002
201509003
201511001
201511002
201511003
201511004
.....
如何查询201509003-201511002之间的记录。
我的想法是通过转为数值来处理,做法如下:
var result = (from a in db_OA.VehicleMaintenanceRecords
join b in db_OA.VehicleDatas on a.licensePlate equals b.licensePlate
join c in db_OA.PayoffTables on a.documentNumber equals c.documentNumber
into Grp
from grp in Grp.DefaultIfEmpty()
where (grp.receiptDate == null || a.leaveFactoryDate == null)
orderby a.documentNumber descending
select new
{
documentNumber = int.Parse(a.documentNumber),//单号为:string类型
licensePlate = b.licensePlate,//车牌号
vehicleOwner = b.vehicleOwner,//车主
registrationDate = a.registrationDate,//登记(进厂)日期
twoLevelMaintenance = a.twoLevelMaintenance,//二保
maintenanceProject = a.maintenanceProject,//检查项目
materialCost = db_OA.OutRecordTBs.Where(n => n.documentNumber == a.documentNumber).Sum(n => n.sellingPrice.HasValue ? n.sellingPrice * n.outNumber : 0),//配件金额
settlementMark = db_OA.PayoffTables.Any(n => n.documentNumber == a.documentNumber),//结算
manHourCost = db_OA.PayoffTables.FirstOrDefault(n => n.documentNumber == a.documentNumber).manHourCost,//工时费
leaveFactoryDate = a.leaveFactoryDate,//出厂日期
collectionAmount = grp.collectionAmount//收款金额
}).ToList();
var orderList = result.Where(p => p.documentNumber >= s_documentNumber && p.documentNumber >= e_documentNumber);
错误提示为:
LINQ to Entities does not recognize the method 'Int32 Parse(System.String)' method, and this method cannot be translated into a store expression.
请高人指点。谢谢
我的QQ:191971159
不要在Select里转换. 在下面转换.
var orderList = result.Where(p => int.Parse(p.documentNumber) >= s_documentNumber && int.Parse(p.documentNumber) >= e_documentNumber);
谢谢!但还是有问题,当s_documentNumber或e_documentNumber为0则不以这为条件查询。我写的代码如下:
(是参考:http://www.cnblogs.com/still-windows7/p/3468355.html)
int s_documentNumber = Request.Form["s_documentNumber"] == "" ? 0 : int.Parse(Request.Form["s_documentNumber"]);
int e_documentNumber = Request.Form["e_documentNumber"] == "" ? 0 : int.Parse(Request.Form["e_documentNumber"]);
查询语句为:
var orderList = result.Where(p => s_documentNumber == 0 ? true : int.Parse(p.documentNumber) >= s_documentNumber
&& e_documentNumber == 0 ? true : int.Parse(p.documentNumber) <= e_documentNumber);
其结果非为所要的为0则不以这为条件查询。
@润物之音:
加上括号试试。
var orderList = result.Where(p => (s_documentNumber == 0 ? true : int.Parse(p.documentNumber) >= s_documentNumber)
&& (e_documentNumber == 0 ? true : int.Parse(p.documentNumber) <= e_documentNumber));