【问题标题】:Convert SQL Query to LINQ Lambda C#将 SQL 查询转换为 LINQ Lambda C#
【发布时间】:2021-05-30 21:06:09
【问题描述】:

我必须修复一个已经在 LINQ Lambda 中编写的查询,我在一个简单 SQL 查询中找到了修复,但现在我在将其转换为 LINQ 查询时遇到了一些麻烦,

这是我的 SQL 查询

select * from RequestItem_SubRequestItem x 
where x.RequestItem_key = 1 and x.SubRequestItem_key in (
    select o.SubRequestItem_key 
    from SubRequestItem_Entitlement o 
    inner join SubRequestItem sr on sr.SubRequestItem_key = o.SubRequestItem_key  
    where o.Entitlement_key = 2 and sr.Action = 'Add' ) 

下面是我的 LINQ C# 代码,我试图在其中插入包括内部连接在内的修复。

z.Entitlements = ARMContext.Context.SubRequestItem_Entitlement
    .Where(o => o.Entitlement_key == z.AccessKey && !o.Role_key.HasValue && o.Entitlement.EntitlementConfiguration.UserVisible == true
            && (ARMContext.Context.RequestItem_SubRequestItem
        .Where(x => x.RequestItem_key == requestItemKey)
        .Select(y => y.SubRequestItem_key)
        .Contains(o.SubRequestItem_key)))
        .Join(ARMContext.Context.SubRequestItems, subrq => subrq.SubRequestItem_key, temp => requestItemKey, (subrq, temp) => subrq == temp)

以前的 C# LINQ 代码看起来像这样

z.Entitlements = ARMContext.Context.SubRequestItem_Entitlement
    .Where(o => o.Entitlement_key == z.AccessKey && !o.Role_key.HasValue && o.Entitlement.EntitlementConfiguration.UserVisible == true
            && (ARMContext.Context.RequestItem_SubRequestItem
        .Where(x => x.RequestItem_key == requestItemKey)
        .Select(y => y.SubRequestItem_key)
        .Contains(o.SubRequestItem_key)))

当我尝试根据我的条件在 LINQ 中插入 JOIN 时,我会看到此错误。

我的错误是什么?谁能告诉我正确的方法吗?

【问题讨论】:

  • 将您的模型添加到问题中。你有导航属性吗?
  • @SvyatoslavDanyliv 嗨,我没有收到您的问题,但下面提到的解决方案确实可以正常工作。

标签: c# sql linq


【解决方案1】:

我认为这应该可以满足您的需要,尽管您可能必须使用 {user, add} 更改依赖于您的 SubRequestItem_Entitlement 表的其他代码

请看一下。我相信你必须做出这些改变。

.Join(ARMContext.Context.SubRequestItems, user => user.SubRequestItem_key, subreqItems => subreqItems.SubRequestItem_key, (user, subreqItems) => new { user, subreqItems })
.Where(Action => Action.subreqItems.Action == z.ApprovalAction)

【讨论】:

    【解决方案2】:

    您可以使用此查询。我完全匹配了 SQL 查询

    var query = ARMContext.Context.RequestItem_SubRequestItem
         .Where(a => a.RequestItem_key == 1 && a.RequestItem_key == (ARMContext.Context.SubRequestItem_Entitlement
         .Join(ARMContext.Context.SubRequestItems,
         right => right.SubRequestItem_key,
         left => left.SubRequestItem_key,
         (right, left) => new
         {
            right = right,
            left = left
         })
         .Where(x => x.right.Entitlement_key == 2 && x.left.Action == "Add" && x.right.SubRequestItem_key == a.RequestItem_key).Select(y => y.right.SubRequestItem_key)).FirstOrDefault());
    

    【讨论】:

      猜你喜欢
      • 2018-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-25
      • 1970-01-01
      • 1970-01-01
      • 2020-12-13
      相关资源
      最近更新 更多