【问题标题】:LINQ to SQL and field concatenation in SQLLINQ to SQL 和 SQL 中的字段连接
【发布时间】:2011-11-04 14:57:06
【问题描述】:

我想创建一个 LINQ 查询,它会产生以下 SQL 语句。假设我有一个只有两个字符字段的简单表 - field1 和 field2。我的 SQL 语句是:

    SELECT field1, field2, field1+field2 AS ConcatField
    FROM TableX
    WHERE field1+field2 = 'abcdef'

如何在 LINQ 中做到这一点?

【问题讨论】:

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


    【解决方案1】:

    您可以使用let 子句来定义您的连接字段,然后选择具有您要返回的 3 个字段的匿名类型。

    from f in TableX
    let concatfield = f.Field1 + f.Field2
    where concatfield = 'abcdef'
    select new
    {
      f.Field1,
      f.Field2,
      concatfield
    }
    

    关于更复杂的 where 子句的示例,您需要构建一个包含要比较的值的数组,然后执行以下操作:

      List<string> values = .....
    
      from f in TableX
      let concatfield = f.Field1 + f.Field2
      where values.Contains(concatfield)
      select new
      {
         f.Field1,
         f.Field2,
         concatfield
      }
    

    【讨论】:

    • 这是完美的。现在让我们让它更复杂一点:SELECT field1, field2, field1+field2 AS ConcatField FROM TableX WHERE field1+field2 IN ('abcdef', 'hijklm')
    • 如果您只有 2 个元素,我建议您只复制该子句。如果你有很多,在哪里做服务器端,你必须将元素上传到一个表中,然后加入那个表。
    • 非常感谢,这绝对把我带到了正确的方向!
    【解决方案2】:

    使用 LinqToSql,这可以通过投影到一个匿名类型和其中的一个字段来完成,该字段是您提到的两个字段的组合:

    var  concatenatedField = from c in ConcatFields
                                 where c.something == somethignElse
                                 select new {
                                   field1 = c.field1
                                   field2 = c.field2
                                   field3 = c.field1 + c.field2
                                  }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多