源程序
sumMoney = products.Sum(p => p.iDistributeWeight * p.iUnitPrice/1000);
对应的sql代码
exec sp_executesql N'SELECT SUM(([t0].[iDistributeWeight] * [t0].[iUnitPrice]) / @p7) AS [value]
FROM [prod_Product] AS [t0]
LEFT OUTER JOIN [prod_Order] AS [t1] ON [t1].[cOrderCode] = [t0].[cOrderCode]
LEFT OUTER JOIN [dbo].[sbase_customer] AS [t2] ON [t2].[custCode] = [t1].[cCustCode]
WHERE ([t1].[DeliveryDate] < @p0) AND ([t1].[DeliveryDate] >= @p1) AND ([t2].[custName] LIKE @p2) AND (([t1].[cOrderTypeCode] = @p3) OR ([t1].[cOrderTypeCode] = @p4)) AND (([t1].[cStatusCode] = @p5) OR ([t1].[cStatusCode] = @p6))',N'@p0 datetime,@p1 datetime,@p2 nvarchar(4000),@p3 nvarchar(4000),@p4 nvarchar(4000),@p5 nvarchar(4000),@p6 nvarchar(4000),@p7 decimal(33,4)',@p0='2011-08-26 00:00:00:000',@p1='2011-01-04 00:00:00:000',@p2=N'%双日プラネッ卜株式会社%',@p3=N'1',@p4=N'2',@p5=N'6',@p6=N'7',@p7=1000.0000在sql server中执行很快,1秒中
在源程序中报超时
sumMoney = products.Sum(p => p.iDistributeWeight * p.iUnitPrice/1000);
对应的sql代码
exec sp_executesql N'SELECT SUM(([t0].[iDistributeWeight] * [t0].[iUnitPrice]) / @p7) AS [value]
FROM [prod_Product] AS [t0]
LEFT OUTER JOIN [prod_Order] AS [t1] ON [t1].[cOrderCode] = [t0].[cOrderCode]
LEFT OUTER JOIN [dbo].[sbase_customer] AS [t2] ON [t2].[custCode] = [t1].[cCustCode]
WHERE ([t1].[DeliveryDate] < @p0) AND ([t1].[DeliveryDate] >= @p1) AND ([t2].[custName] LIKE @p2) AND (([t1].[cOrderTypeCode] = @p3) OR ([t1].[cOrderTypeCode] = @p4)) AND (([t1].[cStatusCode] = @p5) OR ([t1].[cStatusCode] = @p6))',N'@p0 datetime,@p1 datetime,@p2 nvarchar(4000),@p3 nvarchar(4000),@p4 nvarchar(4000),@p5 nvarchar(4000),@p6 nvarchar(4000),@p7 decimal(33,4)',@p0='2011-08-26 00:00:00:000',@p1='2011-01-04 00:00:00:000',@p2=N'%双日プラネッ卜株式会社%',@p3=N'1',@p4=N'2',@p5=N'6',@p6=N'7',@p7=1000.0000在sql server中执行很快,1秒中
在源程序中报超时
解决方案 »
- VS2010 rdlc报表 一个报表如何显示多个数据源
- c# winform程序登录问题
- C#软件里,如何显示CPU和内存参数?
- 关于C#的编译速度
- 运行 dcomcnfg,打开DCOM以后双击里面任何一项都提示“操作成功完成。”,请问咋整。
- 异常信息的捕获(急!急!)高手请指点
- C#如何在显示器屏幕上输出提示字符
- C#操作ExceL文件的为什么进程里的Excel?
- 求VS2010安装包...
- 超级简单问题?
- c#去掉xml里所有节点边名称空间
- 流事务无法取消封送。出现下列异常: MSDTC 事务管理器的 WS-AtomicTransaction 协议服务“Version10”已禁用,无法打乱传入事务
好像建立model的时候可以选择每个field的currency mode.
如果都设置成true的话,update记录是会将所有的field都放在where中去标识一条记录,如果被人已经更新了记录的话,就找不到产生错误。
我定义了一个函数,返回结果集,同时参数中有一个out参数,返回汇总金额,
时间段是1年,当运行到计算汇总金额的时候,超时,(这个是在.net中执行超时)
在sql profile跟踪,找到执行的sql代码,在查询分析器中执行,1秒钟就执行成功了数据库连接不存在问题 var orders = db.Orders.Where(o => 1 == 1); //已发货、已到货 var status = db.NormalTypes.Where(n => n.cType == "OrderStatus");
var type = db.NormalTypes.Where(n => n.cType == "OrderType"); orders = orders.Where(o => o.cStatusCode == "6" || o.cStatusCode == "7"); //已发货、已到货 //订单区域:厂内、大区
orders = orders.Where(o => o.cOrderTypeCode == "1" || o.cOrderTypeCode == "2"); if (strStartDate != null)
{
DateTime startDate = Convert.ToDateTime(strStartDate);
orders = orders.Where(o => o.DeliveryDate >= startDate);
}
if (strEndDate != null)
{
DateTime endDate = Convert.ToDateTime(strEndDate);
orders = orders.Where(o => o.DeliveryDate < endDate);
} if (deptCode != null)
{
orders = orders.Where(o => o.cDeptCode == deptCode);
} if (salemanCode != null)
{
orders = orders.Where(o => o.cSalemanCode == salemanCode);
} if (custName != null)
{
orders = orders.Where(o => SqlMethods.Like(o.Customer.cust_name, "%" + custName + "%"));
} if (hasPart != null)
{
if ((bool)hasPart)
{
orders = orders.Where(o => o.InvoiceOrders.Count() != 0);
}
else
{
orders = orders.Where(o => o.InvoiceOrders.Count() == 0);
}
} if (isWaitInvoice != null)
{
if ((bool)isWaitInvoice)
{
orders = orders.Where(o => (o.Products.Sum(p => p.iDistributeWeight * p.iUnitPrice / 1000) - (o.Discounts.Sum(d => d.iMoney) ?? 0) - (o.InvoiceOrders.Sum(io => io.iMoney) ?? 0)) > 0);
}
} if (orderCode != null)
{
orders = orders.Where(o => SqlMethods.Like(o.cOrderCode, "%" + orderCode + "%"));
} if (cStoreHouse != null)
{
if (cStoreHouse == "厂内")
{
orders = orders.Where(o => (o.cStoreHouse == "" || o.cStoreHouse==null ));
}
else
{
orders = orders.Where(o => (o.cStoreHouse == cStoreHouse));
}
} sumMoney = orders.Sum(o => o.Products.Sum(p=>p.iDistributeWeight * p.iUnitPrice/1000));
if (sumMoney != null)
{
sumMoney = Math.Round((decimal)sumMoney, 2);
} if (isSum != null)
{
if (isSum == 1)
{
return orders.GroupBy(o => new { o.cDeptCode, o.cDeptName, o.cSalemanCode, o.cSalemanName }).Select(g => new { 大区 = g.Key.cDeptName,大区编号 = g.Key.cDeptCode, 业务员 = g.Key.cSalemanName, 总价 = g.Sum(o => o.Products.Sum(p => p.iDistributeWeight * p.iUnitPrice / 1000)), 优惠 = g.Sum(o => o.Discounts.Sum(d => d.iMoney) ?? 0), 应收货款 = g.Sum(o => o.Products.Sum(p => p.iDistributeWeight * p.iUnitPrice / 1000) - (o.Discounts.Sum(d => d.iMoney) ?? 0)) }).OrderBy(o => o.大区);
}
} return orders.Join(status, o => o.cStatusCode, s => s.cCode, (o, s) => new { o, s }).Join(type, o => o.o.cOrderTypeCode, t => t.cCode, (o, t) => new { o, t }).Select(o => new { 订单编号 = o.o.o.cOrderCode, 业务员 = o.o.o.Person.cPersName, 客户名称 = o.o.o.Customer.cust_name, 总价 = o.o.o.Products.Sum(p => p.iDistributeWeight * p.iUnitPrice / 1000), 应收货款 = o.o.o.Products.Sum(p => p.iDistributeWeight * p.iUnitPrice / 1000) - (o.o.o.Discounts.Sum(d => d.iMoney) ?? 0), 优惠 = o.o.o.Discounts.Sum(d => d.iMoney) ?? 0, 剩余未开票金额 = o.o.o.Products.Sum(p => p.iDistributeWeight * p.iUnitPrice / 1000) - (o.o.o.Discounts.Sum(d => d.iMoney) ?? 0) - (o.o.o.InvoiceOrders.Sum(io => io.iMoney) ?? 0), 发货日期 = o.o.o.DeliveryDate, 订单区域 = o.o.o.cOrderTypeName, 订单日期 = o.o.o.OrderDate, 是否开发票 = o.o.o.iWithTax, 配货重量 = o.o.o.Products.Sum(p => p.iDistributeWeight) }).OrderByDescending(o => o.发货日期);