2

C#の大規模なデータベースでLINQクエリを実行する必要があります。クエリで使用する必要がある列の1つはdoubleです。この列の小数点以下4桁を超える結果を省略する必要があります。他のプログラムがデータベースを使用し、私が望まないものを利用する必要があるため、データベースを変更することはできません。結果は、後で使用するためにリストに追加されます。これでうまくいくと思いました。

where fun.Units != '*.?????*'

ただし、文字リテラルに含まれる文字が多すぎるというエラーが返されます。これまでのところ、クエリ全体は次のようになっています

var clientQuery1 = from cli in main1.Clients
                   from pol in main1.Policies
                   from fun in main1.FundHoldings
                   from uni in main1.UnitPrices
                   where cli.AccountNumber == accNum
                   && pol.ClientRef == cli.ClientRef
                   && fun.FKeyRef == pol.PolicyRef
                   && uni.UnitPriceRef == fun.UnitPriceRef
                   && fun.Units != '*.?????*'
                   select uni.UnitName;
4

2 に答える 2

1

さて、あなたはその特定のエラーを使用して解決することができます:

&& fun.Units != "*.?????*"

一重引用符から二重引用符への変更に注意してください。ただし、それは全体的には役に立ちません。fun.UnitsLINQのタイプは何ですか?10進数の場合は、次を使用できる可能性があります。

&& decimal.Round(fun.Units, 4) == fun.Units

...しかし、生成されたSQLでそれが何をするのかは私にはわかりません。試してみる価値はありますが、それが機能したとしても、SQLがどのように見えるかを確認する必要があります。

于 2011-08-31T09:49:52.257 に答える
1

以下のクエリを試して、私に知らせてください。

var clientQuery1 = from cli in main1.Clients
                   from pol in main1.Policies
                   from fun in main1.FundHoldings
                   from uni in main1.UnitPrices
                   where cli.AccountNumber == accNum
                   && pol.ClientRef == cli.ClientRef
                   && fun.FKeyRef == pol.PolicyRef
                   && uni.UnitPriceRef == fun.UnitPriceRef
                   && fun.Units == Math.Round(Convert.ToDouble(fun.Units),4)
                   select uni.UnitName;
于 2011-08-31T09:53:16.953 に答える