2010-12-03 5 views
1

このSQLサーバーのselect文は204文字を返し、末尾にはその行に204文字以上ある場合は追加します。linqをSQLに使用してテキストの一部の文字列を返す方法

SELECT Name, Active, Image, CASE WHEN LEN(Description) <= 204 THEN Description ELSE LEFT (Description , 204) + '...' END AS 'Short Description' FROM Brands 

これを行うにはどうすればいいですか?

var query = db.Brands.Select(p=> new{ 
     Brand =p, 
     p.Description.Length <-- I believe this is a starting point?> 
    }); 

答えて

2

まあ、直訳は次のようになります。

var query = db.Brands.Select(p => new { 
     Brand = p, 
     Description = p.Description.Length < 204 
          ? p.Description 
          : p.Description.Substring(0, 204) + "..." 
    }); 

しかし、それが働いていた場合、私は驚かれることと思います...

それはあなたがSQL側でこれを行うことが絶対不可欠です、クライアントではなく?たとえば、このます作品:次のようにそれを書くために

var query = db.Brands 
       .AsEnumerable() 
       .Select(p => new { 
     Brand = p, 
     Description = p.Description.Length < 204 
          ? p.Description 
          : p.Description.Substring(0, 204) + "..." 
    }); 
+0

があることは、それを行うための最善の方法ですか?私は達成しようとしていたものの例のためだけにSQLコードを含めました。 –

+0

無効な匿名型メンバー宣言子があります。 –

+1

私はこれがコンパイルされるとは思わない...コンパイラはその場合にそれを推論することができないので、明示的に( 'Description = ...')プロパティ名を指定する必要がある –

0

正しい方法は次のとおりです。

var query = db.Brands.Select(p=> new{ 
     Brand =p, 
     c= p.Description.Length < 204 ? p.Description 
           : p.Description.Substring(0, 204) + "..." 
    }); 
関連する問題