【问题标题】:Linq query to SQL queryLinq 查询到 SQL 查询
【发布时间】:2016-01-31 06:05:16
【问题描述】:

我有一个运行良好的 Linq 查询,但我需要编写 SQL 查询 有人可以帮我写吗? 此查询将使用时间和模型过滤器搜索view 中的foreach a.ha.HV 数据库,最后它检查选项Filter.M,如果它被选中,它将搜索所有在此 DropDownCheckBoxes 中选择的数据` 如何在 SQL 命令中编写 this where 和 select 部分?

ret1 = (from a in View
        where
            a.LastRefreshTime>=Filter.From && a.LastRefreshTime<=Filter.To && a.ModelCode == mdlCode &&
            Filter.PN.Select(epn => epn.Substring(0, 11)).Contains(a.H) &&
            Filter.PN.Select(epn => epn.Substring(14, 2)).Contains(a.HV)

        select new RData
        {
            v = a.v,
            Date = a.LastRefreshTime,
            UserId = a.UserId,
            M = a.Name,
        }).Distinct().AsQueryable();
ret = ret1.Where(nr =>
    Filter.M == null || !Filter.M.Any() || Filter.M.Contains(nr.M)
).ToList();

【问题讨论】:

  • 它正在工作,但由于某种原因我应该编写 sql 查询,我刚刚更新了我的问题
  • 是的,但是您已经编写了哪些 SQL 以及 that 以什么方式不起作用?
  • 我需要知道如何编写这个查询,部分'包含'在sql中
  • Linq pad 可以从一个转换到另一个,不确定它有多可靠,因为我没有将它用于任何有意义的事情。 linqpad.net。在sql中包含你应该看看这个w3schools.com/sql/sql_in.asp
  • 只需在 SQL 分析器运行的情况下执行它就可以了……

标签: c# sql linq sql-server-2008 linq-to-sql


【解决方案1】:

这是你的开始

select a.v v,
       a.LastRefreshTime "Date",
       a.UserId,
       a.Name
  from a
 where a.LastRefreshTime>= arg_filter_from
   and a.LastRefreshTime<= arg_filter_to
   and a.ModelCode = arg_mdlCode
   .
   .
   .

在此查询中,您需要将 'arg_...' 替换为所需的适当值或参数。

包含大致相当于SQL中的"IN"。例如:

where a.Name in ('jim', 'bob', 'joe')

In 也可以与子选择一起使用,这大致是我认为 Filter.PN.Select 正在做的事情,尽管我不是 linq 专家。示例:

where a.H in (Select foo from PN_Table)

或者更简单的例子继续我之前的名字例子:

where a.Name in (select first_name from table)

【讨论】:

    【解决方案2】:

    如果我们假设 Filter.PN 列表代表你的 sql 数据库中的一个表 FilterPN,那将是你为第一个 linq 查询转换的代码

    1. select distinct a.v, a.LastRefreshTime, a.UserId, a.Name
      from [view] a where a.LastRefreshTime>= 'Filter.From' and
      a.LastRefreshTime<='Filter.To' and a.ModelCode = 'mdlCode' and
      exists(select top 1 * from FilterPN where Substring(epn, 1, 11) = a.H) and exists(select top 1 * from FilterPN where Substring(e
      在此输入代码pn, 15, 2) = a.HV)

    考虑用你的真实值'Filter.To'替换被引用的变量......

    【讨论】:

    • 谢谢。我想知道,这个查询返回很多行,我有一个像 public class RData { public string V; 这样的类。 ... 公共字符串 D; } 在选择部分我需要阅读它们并将它们放入这个类
    • 另一个问题是我的过滤器数据是下拉框中的数据。所以我可以像 sql 查询一样写吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-19
    相关资源
    最近更新 更多