【问题标题】:Subqueries in linqlinq 中的子查询
【发布时间】:2010-11-16 15:09:20
【问题描述】:

我已经尝试了几天在 LINQ 中“翻译”这个查询,但到目前为止没有成功。你们能帮帮我吗?我也希望能得到一些解释,以便从中学到一些实际的东西。

这是 T-SQL 查询:

SELECT R.ResourceID, R.DefaultValue
FROM Resources as R
JOIN
    (SELECT [t0].[NameResourceID] AS [ResourceID]
    FROM [dbo].[Sectors] AS [t0]
    LEFT OUTER JOIN [dbo].[LocalizedResources] AS [t1] ON [t0].[NameResourceID] = [t1].[ResourceID] and [t1].[LanguageID] = 2
    WHERE t1.Value IS NULL)  AS subQ 

ON R.ResourceID = subQ.ResourceID

谢谢

【问题讨论】:

  • 你为什么要“加入”那个 subQ ......你没有从那里拉出一个值。那应该是一个 WHERE 子句,因为您所做的只是使用它进行过滤。这可能就是您难以翻译它的原因。
  • 我只需要来自 subQ 的那些条目的 ID。事实上,我只用它来过滤。我只是找不到更好的解决方案。你有什么建议吗?基本上,我试图找到所有未本地化为 X 语言的资源,然后查看其中是否有任何扇区。

标签: c# sql linq-to-sql subquery join


【解决方案1】:

尝试类似的方法:

from r in db.Resources
join subQ in (from t0 in db.Sectors
              join t1 in db.LocalizedResources on t0.NameResourceID equals t1.ResourceID
              where t1.LanguageId
              && t1.Value == null
              select new { ResourceID = t0.NameResourceID }) on r.ResourceID equals subQ.ResourceID
select new { r.ResourceId, r.DefaultValue };

【讨论】:

  • 不幸的是,这不起作用。它在 TSQL 中被翻译成: SELECT [t0].[ResourceID], [t0].[DefaultValue] FROM [dbo].[Resources] AS [t0] INNER JOIN ([dbo].[Sectors] AS [t1] INNER加入 [dbo].[LocalizedResources] AS [t2] ON [t1].[NameResourceID] = [t2].[ResourceID]) ON [t0].[ResourceID] = [t1].[NameResourceID] WHERE 0 = 1 I '已经尝试修改它,但我无法变得更好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-03
  • 2020-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多