2011-11-04 82 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 
           }