2

SQLサーバーに次の文があります:

SELECT * FROM Documentos WHERE ( @param IS NULL OR strNOMPRO = @param )

そして私はエンティティでこれを行います

DocumentsList = db.DOCUMENTOS
                .Where(d => d.strNOMPRO == nombre && d.strNOMPRO == null)
                .OrderByDescending(d => d.datFECCER).ToList();

param が null の場合、これは sql のすべてのレジスタを返しますが、linq では 0 レジスタを返します

どうすればこれをうまく行うことができますか?

4

1 に答える 1

5

これは、SQL WHERE ステートメントに相当します。

DocumentsList = db.DOCUMENTOS
                .Where(d => nomber == null || d.strNOMPRO == nombre)
                .OrderByDescending(d => d.datFECCER)
                .ToList();

nullOR ( || 演算子)のパラメータをチェックし、strNOMPRO プロパティがパラメータと等しいことをチェックします。

ところで、クエリの途中でパラメーターを変更することはできません。フィルタリング条件を動的に追加する方が効率的です。

var query = db.DOCUMENTOS;

if (!String.IsNullOrEmpty(nombre))
    query = query.Where(d => d.strNOMPRO == nombre);

DocumentsList = query.OrderByDescending(d => d.datFECCER).ToList();

その他の読み方: && 演算子|| オペレーター

于 2013-07-23T16:28:45.570 に答える