2014-01-25 33 views
0

我有这样如何加入LINQ到另一个LINQ

WITH CTE_KELOMPOKINFORMASI (KelompokInformasi, XBRLItem_ItemId) 
AS (
SELECT a.Id AS KelompokInformasi, c.XBRLItem_ItemId 
FROM XBRLNamespaces a INNER JOIN XBRLHypercubes b 
ON a.XBRLView_ViewId = b.XBRLView_ViewId 
INNER JOIN XBRLHypercubeDimensionItems c 
ON b.XBRLHypercubeId = c.XBRLHypercube_XBRLHypercubeId 
WHERE a.Id like '%KBIK_AAKL%') 

SELECT f.KelompokInformasi, e.Name AS DimensionName, c.Id AS Domain, 
d.Text AS Description FROM [dbo].[XBRLDefinitionRoleDomainItems] a 
INNER JOIN [dbo].[XBRLDefinitionRoleDimensionItems] b 
ON a.XBRLDefinitionRole_DefinitionRoleId = b.XBRLDefinitionRole_DefinitionRoleId 
INNER JOIN XBRLItems c ON a.XBRLItem_ItemId = c.ItemId 
INNER JOIN XBRLLabels d 
ON a.XBRLItem_ItemId = d.XBRLItem_ItemId 
INNER JOIN XBRLItems e 
ON b.XBRLItem_ItemId=e.ItemId 
INNER JOIN CTE_KELOMPOKINFORMASI f 
ON b.XBRLItem_ItemId=f.XBRLItem_ItemId 
WHERE b.XBRLItem_ItemId=f.XBRLItem_ItemId 

我想搬到这个SQL查询LINQ查询,我意识到,在CTE LINQ是不可能的。所以我分成两部分。首先,我创建这样一个变种:

var KelompokInformasi = from x in ent.XBRLNamespaces 
            join y in ent.XBRLHypercubes on x.XBRLView_ViewId equals y.XBRLView_ViewId 
            join z in ent.XBRLHypercubeDimensionItems on y.XBRLHypercubeId equals z.XBRLHypercube_XBRLHypercubeId 
            where x.Id.Contains("KBIK") 
            select new 
            { 
             x.Id, 
             y.XBRLItem_ItemId 
            }; 

,并在第二部分我创建:

_list = (from a in ent.XBRLDefinitionRoleDomainItems 
        join b in ent.XBRLDefinitionRoleDimensionItems on a.XBRLDefinitionRole_DefinitionRoleId equals b.XBRLDefinitionRole_DefinitionRoleId 
        join c in ent.XBRLItems on a.XBRLItem_ItemId equals c.ItemId 
        join d in ent.XBRLLabels on a.XBRLItem_ItemId equals d.XBRLItem_ItemId 
        join e in ent.XBRLItems on b.XBRLItem_ItemId equals e.ItemId 
        join f in KelompokInformasi on b.XBRLItem_ItemId equals (int)f.XBRLItem_ItemId 
        where (b.XBRLItem_ItemId == (int)f.XBRLItem_ItemId) 
        select new MappingDomainRepository 
        { 
         KI = f.Id, 
         Dimension = e.Name, 
         Domain = c.Id, 
         Description = d.Text 
        }).ToList(); 

哪里_list是从我上面的代码List<MappingDomainRepository> _list = new List<MappingDomainRepository>();

,我想加入我的_listvar KelompokInformasi。在var kelompokInformasi我有47行,但在_list我有0个数据返回。

我的代码有什么问题?是否有可能将我的_list加入var kelompokInformasi?

+0

看看ceonversion的工具:) http://stackoverflow.com/questions/296972/sql-to-linq-tool – lordkain

回答

0

你需要第二部分更改为:

var other = (from a in ent.XBRLDefinitionRoleDomainItems 
      join b in ent.XBRLDefinitionRoleDimensionItems on a.XBRLDefinitionRole_DefinitionRoleId equals b.XBRLDefinitionRole_DefinitionRoleId 
      join c in ent.XBRLItems on a.XBRLItem_ItemId equals c.ItemId 
      join d in ent.XBRLLabels on a.XBRLItem_ItemId equals d.XBRLItem_ItemId 
      join e in ent.XBRLItems on b.XBRLItem_ItemId equals e.ItemId 
      join f in KelompokInformasi on b.XBRLItem_ItemId equals (int)f.XBRLItem_ItemId 
      where (b.XBRLItem_ItemId == (int)f.XBRLItem_ItemId) 
      select new MappingDomainRepository 
      { 
       KI = f.Id, 
       Dimension = e.Name, 
       Domain = c.Id, 
       Description = d.Text, 
       XBRLItem_ItemId = a.XBRLItem_ItemId 
      }; 

...这其中使用加入到CTE的XBRLItem_ItemId补充道。

然后将两者结合在一起。我们还有其他的(上)和KelompokInformasi从CTE:

var result = from x in KelompokInformasi 
      join o in other on x.XBRLItem_ItemId equals o.XBRLItem_ItemId 
      select new {KelompokInformasi = o.KelompokInformasi, 
         DimensionName = o.Name, 
         Domain = o.Id, 
         Description = o.Text 
         }; 

..这似乎是你exentually选择列。

+0

谢谢你回答我的问题。我改变了我的第二部分像上面的代码,但在var其他我仍然得到0结果。当我在快速观察中查看var其他信息时,我收到了此消息“Empty”枚举未产生任何结果“string” – bagusofterror

+0

好的。这可能是那个返回的正确值。我所做的只是采取你的陈述,并添加一个.XBRLItem_ItemId选择。我建议检查SQL,并检查连接的逻辑是否正确(我不能这样做:我不知道你的数据是什么或意味着什么!) –

+0

我会再次纠正我的连接查询..谢谢你信息,它非常有助于西蒙:) – bagusofterror