2011-11-04 47 views
1

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

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

这怎么能在LINQ中完成?

回答

5

您可以使用let子句来定义concatfield,然后选择一个带有您想要返回的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 
    } 
+0

这是完美的。现在让我们把它变得更复杂一点: 'SELECT field1,field2,field1 + field2 AS ConcatField FROM TableX WHERE field1 + field2 IN('abcdef','hijklm')' – okieh

+0

如果你只有2个元素, d建议只复制该条款。如果你有很多东西,以及服务器端要做什么,你必须将元素上传到一个表中,然后加入到这个表中。 – Tipx

+0

非常感谢,这确定了我的方向! – okieh

1

使用LinqToSql这可以通过投射到一个匿名类型和一个字段中来实现,它是您提到的两个文件的组合:

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