4

正常に実行される linq クエリがあります。返される列の 1 つは、ポンドとペンスで価格を表すために使用される 10 進数型です (負の値は決してありません)。

ポンドとペンスを投影の個別のプロパティに取り出せるようにしたいのですが、次のような機能を使用する場合

var result= from j in context.Products

 select
   new{
     Price = t.Price,                                                     
     PricePounds = Math.Truncate(t.Price)
   };

Math.truncate は store 式に変換できないため、サポートされていないというエラーが表示されます。このクエリからポンドの値を取得するにはどうすればよいですか?

4

2 に答える 2

4

その後、データベースで他に何もする必要がない場合、最も簡単なアプローチは、クライアント側で切り捨てを実行することです。

var query = context.Products
                   .AsEnumerable() // Everything from here is LINQ to Objects
                   .Select(p => new {
                               p.Price,
                               PricePounds = Math.Truncate(p.Price)
                           });

int-にキャストしたい場合もあることに注意してください。これは、EFですでにサポートされている可能性があります。

編集:コメントに記載されているように、最初に投影を実行することをお勧めします。

var query = context.Products
                   .Select(p => new { p.Price, p.SomethingElse })
                   .AsEnumerable() // Everything from here is LINQ to Objects
                   .Select(p => new {
                               p.Price,
                               PricePounds = Math.Truncate(p.Price),
                               p.SomethingElse
                           });

SomethingElse(例として、あなたが興味を持っている別の物件はどこにありますか?私はあなたが価格だけを望んでいるとは思えません。)

これにより、少数のプロパティのみが必要な場合にエンティティ全体がフェッチされるのを防ぐことができます。

于 2012-09-04T16:12:18.170 に答える
4

あなたは試すことができます:

var result= from j in context.Products
select
  new {
       Price = t.Price,                                                     
       PricePounds = EntityFunctions.Truncate(t.Price, 0)
      };

場合は、Math.Truncate は、EntityFunctions.Truncate が必要な SQL に変換できません。

于 2012-09-04T16:20:42.537 に答える