2

オブジェクトを、DB の Indexes というテーブルに格納されている他のオブジェクトと比較する必要があるとします。X文字列であるオブジェクトのプロパティで比較する必要がありますが、 null.

また、比較する前に、比較対象の X プロパティをトリミングする必要があります。私は次のことをしようとしました:

List<Guid> Ids = DataContext.Indexes.Where(ci =>
                 (comparedObject.X != null && ci.X != null ? 
                 ci.X == comparedObject.X.Trim() :
                 (ci.X == null || ci.X == string.Empty) && (comparedObject.X == null || comparedObject.X == string.Empty))).Select(ci => ci.Id).ToList();

そして、それcomparedObjects.Xnullまだ式のヌル参照例外をスローしますcomparedObject.X.Trim()

私はそれがlinq変換のために起こると思いますか?

クエリの前に null の場合に空の文字列Xを割り当てることなく、プロパティをトリミングするよりきれいな方法はありますか?comparedObject.X

編集:詳しく説明したいと思います-このクエリは、ここでは簡単にするために縮小されました。他の約6つのプロパティも比較しています。Xこれを 1 つのクエリにまとめ、プロパティだけが異なる 2 つのクエリに分けないようにしたいと思います。クエリの外側をトリミングすることが私の現在の解決策です。何かある場合に備えて、ステートメント内の解決策を望んでいました:)

ありがとう!

4

2 に答える 2

1

そして、比較オブジェクト.X が null であっても、比較オブジェクト.X.Trim() 式に対しては引き続き null 参照例外をスローします。

linq ステートメントの前に null チェックを行うことをお勧めします

if(comparedObject !=null && !string.IsNullorEmpty(comparedObject.X))
{
    // your code goes here 
}

以下のコード

(ci.X == null || ci.X == string.Empty) && (comparedObject.X == null || comparedObject.X == string.Empty)

に変更できます

string.IsNullorEmpty(ci.X) && string.IsNullorEmpty(comparedObject.X)

そして、私は以下のようにコードを変更します

List<Guid> Ids = DataContext.Indexes.Where(ci =>
                 (string.IsNullorEmpty(ci.X) && string.IsNullorEmpty(comparedObject.X)) || ci.X == comparedObject.X.Trim())
                .Select(ci => ci.Id).ToList();
于 2013-07-22T09:13:02.563 に答える
0

あなたが試すことができるかもしれません:

List<Guid> Ids = DataContext.Indexes.Where(ci =>ci.X != null ? ci.X == comparedObject.X==null?"":comparedObject.X.Trim() :
                                 (comparedObject.X == null || comparedObject.X == null)))
                            .Select(ci => ci.Id).ToList();
于 2013-07-22T09:23:14.810 に答える