【问题标题】:Use "In" clause entity framework使用“In”子句实体框架
【发布时间】:2014-04-03 20:53:34
【问题描述】:
Dim objModel As New HireBPCEntities
Dim SuspenseEntry = From M In objModel.tblSuspenseEntries Where strIDsToApprove.Contains(M.ID)

 For Each Entry In SuspenseEntry.ToList()

    Dim tblSE As tblSuspenseEntry = DirectCast(Entry, tblSuspenseEntry)
    tblSE.Exclude_YN = "N"
   //Some other code
   objModel.SaveChanges()
Next

这里的 strIDsToApprove 是逗号分隔值。 即 strIDsToApprove = "1,2,4,7" 或者有时 strIDsToApprove ="12" (用户可以选择一个或多个记录)

我的问题是当 strIDsToApprove ="12" 时,如果我在上面的代码中使用包含,则 LINQ 会获得 3 条 ID 为 1,2 和 12 的记录。在这种情况下,我只需要 ID 为“12”的记录。

这相当于 SQL 从 tblSuspenseEntry 中选择 * 其中 (12) 中的 ID --返回一行 ID=12

我在这里缺少什么?如何使用实体框架编写“IN”子句。

【问题讨论】:

  • strIDsToApprove 应该是整数的解析数组,而不是字符串。

标签: asp.net vb.net entity-framework


【解决方案1】:

Contains 方法的作用与 sqlIn 关键字相同。

Dim matches() As Integer = {1, 2, 12}
Dim query = tblSuspenseEntry.Where(Function(o) matches.Contains(o.Id)).ToList()

【讨论】:

    【解决方案2】:

    将 M.ID 字段的数据类型与 strIDsToApprove 匹配。混合和匹配整数和字符串会产生此类问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-01
      • 1970-01-01
      • 2011-12-31
      • 1970-01-01
      • 2011-01-23
      相关资源
      最近更新 更多