Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在VS Lightswitch中将SQL查询转换为LINQ时出现问题_Sql_Linq_Entity Framework_Visual Studio Lightswitch - Fatal编程技术网

在VS Lightswitch中将SQL查询转换为LINQ时出现问题

在VS Lightswitch中将SQL查询转换为LINQ时出现问题,sql,linq,entity-framework,visual-studio-lightswitch,Sql,Linq,Entity Framework,Visual Studio Lightswitch,因此,我对一个被转换为LINQ(并经过测试)的SQL查询有一个问题,但同一个LINQ查询在Lightswitch中不起作用。当然,我并没有期望直接工作,但我正在努力正确地转换它 下面是我查询所基于的表的图像: (很抱歉外部链接,但没有足够的代表点:)) SQL查询如下所示: SELECT WorkingUnits.Name AS WUName, ContractPositions.WUInstanceId, Materials.Cost, BillingValues.Value, Bil

因此,我对一个被转换为LINQ(并经过测试)的SQL查询有一个问题,但同一个LINQ查询在Lightswitch中不起作用。当然,我并没有期望直接工作,但我正在努力正确地转换它

下面是我查询所基于的表的图像:

(很抱歉外部链接,但没有足够的代表点:))

SQL查询如下所示:

SELECT WorkingUnits.Name AS WUName, ContractPositions.WUInstanceId,
   Materials.Cost, BillingValues.Value, BillingValues.PricePerUnit
FROM WorkingUnits 
  INNER JOIN
   Materials ON WorkingUnits.Id = Materials.Material_WorkingUnit 
  INNER JOIN ContractPositions ON 
   Materials.Id = ContractPositions.ContractPosition_Material 
  INNER JOIN BillingValues ON 
   ContractPositions.Id = BillingValues.BillingValue_ContractPosition
现在,我已通过以下方式将其转换为LINQ:

 var query = from wu in this.DataWorkspace.ApplicationData.WorkingUnits
             join m in this.DataWorkspace.ApplicationData.Materials on 
                new { Id = WorkingUnits.Id } equals new { Id = m.Material_WorkingUnit }
             join cp in this.DataWorkspace.ApplicationData.ContractPositions on 
                new { Id = m.Id } equals new { Id = cp.ContractPosition_Material }
             join bv in this.DataWorkspace.ApplicationData.BillingValues on 
                new { Id = cp.Id } equals new { Id = bv.BillingValue_ContractPosition }
             select new
             {
                 usage = bv.Value * bv.PricePerUnit,
                 totalCost = (bv.Value * bv.PricePerUnit) * m.Cost, 
                 amount = (bv.Value*bv.PricePerUnit) * m.Cost / wu.WUPrice
             };
请注意,我已经更改了一些东西,比如柱的部分,因为我在Lightswitch中不需要它

因此,当这对SQL Server起作用时,LtTwitter抱怨说,我必须考虑显式指定范围变量“工作单元”的类型。 我试图将其转换,但还有其他错误,例如:

 'int' does not contain a definition for 'Id' and no extension method 'Id' 
  accepting a first argument of type 'int' could be found (are you missing 
  a using directive or an assembly reference?)
所以我的问题是,如何正确地转换该查询并期望它工作? 此外,如果我们认为我的数据库设置正确,我甚至需要在LINQ中使用“连接”吗?
任何想法都很感激

试试这样的东西

var query = from wu in this.DataWorkspace.ApplicationData.WorkingUnits
                 join m in this.DataWorkspace.ApplicationData.Materials on 
                   wu.Id  equals m.WorkingUnitID }
                 join cp in this.DataWorkspace.ApplicationData.ContractPositions on 
                    m.Id  equals cp.ContractPosition_Material 
                 join bv in this.DataWorkspace.ApplicationData.BillingValues on 
                   cp.Id equals bv.BillingValue_ContractPosition 
                 select new
                 {
                     usage = bv.Value * bv.PricePerUnit,
                     totalCost = (bv.Value * bv.PricePerUnit) * m.Cost, 
                     amount = (bv.Value*bv.PricePerUnit) * m.Cost / wu.WUPrice
                 };

从底部(BillingValues)开始,然后使用实体引用逐步向上,怎么样

乙二醇


好的,谢谢,但这相当于上面的查询。同样的问题仍然存在。我认为这应该有效!明天我将测试它,并将问题标记为已回答。但有一件事我不太确定——如果这是计算字段方法的一部分,是否可以将“totalCost”的值(例如)分配给计算方法签名的“result”?
  var query = from bv in this.DataWorkspace.ApplicationData.BillingValues
     let m = bv.ContractPosition.Material  
     let wu = m.WorkingUnit
     select new
     {
          usage = bv.Value * bv.PricePerUnit,
          totalCost = (bv.Value * bv.PricePerUnit) * m.Cost, 
          amount = (bv.Value*bv.PricePerUnit) * m.Cost / wu.WUPrice
     };