如何对字符串进行区间查询?

qjw9004 2015-10-30 01:15:43
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
...全文
1533 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_15148111 2017-05-27
  • 打赏
  • 举报
回复
刚刚那是错的, 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 { a,b,c, grp }).AsEnumerable().Select(item => new { documentNumber = int.Parse(item.a.documentNumber),//单号为:string类型 licensePlate = item.b.licensePlate,//车牌号 vehicleOwner = item.b.vehicleOwner,//车主 registrationDate = item.a.registrationDate,//登记(进厂)日期 twoLevelMaintenance = item.a.twoLevelMaintenance,//二保 maintenanceProject = item.a.maintenanceProject,//检查项目 materialCost = db_OA.OutRecordTBs.Where(n => n.documentNumber == item.a.documentNumber).Sum(n => n.sellingPrice.HasValue ? n.sellingPrice * n.outNumber : 0),//配件金额 settlementMark = db_OA.PayoffTables.Any(n => n.documentNumber == item.a.documentNumber),//结算 manHourCost = db_OA.PayoffTables.FirstOrDefault(n => n.documentNumber == item.a.documentNumber).manHourCost,//工时费 leaveFactoryDate = item.a.leaveFactoryDate,//出厂日期 collectionAmount = item.grp.collectionAmount//收款金额 }).ToList();
qq_15148111 2017-05-27
  • 打赏
  • 举报
回复
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 { a,b,c, grp }).Select(item => new { documentNumber = int.Parse(item.a.documentNumber),//单号为:string类型 licensePlate = item.b.licensePlate,//车牌号 vehicleOwner = item.b.vehicleOwner,//车主 registrationDate = item.a.registrationDate,//登记(进厂)日期 twoLevelMaintenance = item.a.twoLevelMaintenance,//二保 maintenanceProject = item.a.maintenanceProject,//检查项目 materialCost = db_OA.OutRecordTBs.Where(n => n.documentNumber == item.a.documentNumber).Sum(n => n.sellingPrice.HasValue ? n.sellingPrice * n.outNumber : 0),//配件金额 settlementMark = db_OA.PayoffTables.Any(n => n.documentNumber == item.a.documentNumber),//结算 manHourCost = db_OA.PayoffTables.FirstOrDefault(n => n.documentNumber == item.a.documentNumber).manHourCost,//工时费 leaveFactoryDate = item.a.leaveFactoryDate,//出厂日期 collectionAmount = item.grp.collectionAmount//收款金额 }).ToList();
weixin_37810640 2017-05-11
  • 打赏
  • 举报
回复
还有,你可以试试单号不在select语句中转换,以字符型存入迭代器,你要用的时候再转成整型
weixin_37810640 2017-05-11
  • 打赏
  • 举报
回复
select 相当于一个返回语句(决定你要输出的数据和方式),你在大括号里赋值我没看懂,你可以以这种方式试下。 select string.Format (" a:"+a+" b:"+b+" sum:"+sum);
yws871218 2017-05-02
  • 打赏
  • 举报
回复
字符长度一样的话可以用字符串直接比较大小 内部自动转换成数值 直接用where查询即可
tangqiaojie 2017-04-26
  • 打赏
  • 举报
回复
如果你全部单号都是这种,其实可以直接按照字符串排序,然后区间搜索就可以的
lovehong123 2017-04-20
  • 打赏
  • 举报
回复
引用 2 楼 xdashewan 的回复:
documentNumber = int.Parse(a.documentNumber),//单号为:string类型 应该是你强行把int型付给了string型导致,你可以在最后的Where条件里,才进行int转换,这里原样赋值就行
2楼的方法试试
本拉灯 2015-11-13
  • 打赏
  • 举报
回复
a.documentNumber 出现了非数字的字符了呗
正怒月神 2015-11-13
  • 打赏
  • 举报
回复
documentNumber = int.Parse(a.documentNumber) 改成 documentNumber = Convert.ToInt32(a.documentNumber) 试试
xdashewan 2015-10-30
  • 打赏
  • 举报
回复
documentNumber = int.Parse(a.documentNumber),//单号为:string类型 应该是你强行把int型付给了string型导致,你可以在最后的Where条件里,才进行int转换,这里原样赋值就行
feiyun0112 2015-10-30
  • 打赏
  • 举报
回复
先Tolist再select

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧