
var dryTblRecords2 = GetDb()
.Queryable<DryTable, ProdTable>((x, p) => new JoinQueryInfos(JoinType.Left, x.MO == p.MOID))
.Where(x => x.Company == company)
.Where(exp2.ToExpression())
.Select((x, p) => new ProductionReport
{
ProductionName = SqlFunc.Subqueryable<ProductTable>().Where(s => s.ItemId == p.ProductNumber).Select(s => s.Name),
MaterielName = SqlFunc.Subqueryable<ProductTable>().Where(s => s.ItemId == p.MaterielPN).Select(s => s.Name),
AssetNo = p.MoldNumber,
ProductionNumber = p.ProductNumber,
MaterielPN = p.MaterielPN,
TonerPN = p.TonerPN,
QtySched = p.QtySched,
MO = p.MOID,
ItemGrossWeight = p.ItemGrossWeight,
ProductionCycle = p.ProductionCycle,
MoldCavityQTY = p.MoldCavityQTY,
OperationTime = x.CreateTime,
ProductionID = x.ProductionLineID,
StartTime = x.CreateTime,
//这一句代码,需要最新版本的sqlsugar,所以更新了sqlsugar版本
ProductionTime = SqlFunc.MappingColumn(default(string), SqlFunc.MergeString("(select MO from DryTable where ID='", x.ID,"') ")),
OperationType = "烘料",
DryNum = x.DryNum,
Operator = x.DryMan,
}).ToList();
ProductionTime = SqlFunc.MappingColumn(default(string), SqlFunc.MergeString("(select MO from DryTable where ID='", x.ID,"') "))
目的:我希望计算两个时间的差值
尝试:
1、尝试使用自己的方法,但是sqlsugar的select不允许使用,推荐使用sqlfunc的内置方法
2、尝试使用sqlfunc中的使用sql语句的方法,也就是上面代码中的MappingColumn,可以直接写固定一句成功返回结果,但是如果加入了局部变量x.id拼接成sql,总是返回异常,例如下面的情况说明
情况:
正常运行:ProductionTime = SqlFunc.MappingColumn(default(string), "SELECT datediff( minute, '2021-03-20 00:11:14', '2021-03-20 00:11:14' )"),
异常运行:ProductionTime = SqlFunc.MappingColumn(default(string), "SELECT datediff( minute, '"+x.CreateTime+"', '"+x.ModifyTime+"' )"),
异常:
Index and length must refer to a location within the string.
Parameter name: length
ProductionTime = SqlFunc.MappingColumn(default(string), SqlFunc.MergeString("(select MO from DryTable where ID='", x.ID,"') "))
改成
ProductionTime = SqlFunc.MappingColumn(default(string), "(select MO from DryTable where ID= x.ID )"
只能用字符串不能和表达式拼接
@fate stay night:非常感谢!已经成功解决我的问题