1

これが私のコードです。できます

var someField = "abc";

var list = Entities.Where(x=>SomeField).FirstOrDefault();

ここに問題があります。someFieldはnullまたはstring.emptyになることもあります。someFieldがnullまたはstring.emptyの場合、SomeFieldがnullまたはstring.emptyであるすべてのものを選択します。

var list = Entities.Where(x=>SomeField  == null || SomeField == string.empty).FirstOrDefault();

現在、someFieldに値があるかどうかを確認するためのif elseステートメントがあり、使用するクエリを決定しました。

2つのクエリを1つにまとめる必要があります。チェックする必要のあるフィールドがある場合、それ以外の場合はstatemetnが非常に長くなるためです。

4

2 に答える 2

3

私はあなたが実際に一致したいと思うか、またはnullまたは空のx.SomeField == someField場合はすべてですよね?someField

私はこれを行います:

var fetchAll = string.IsNullOrEmpty(someField);
var list = Entities.FirstOrDefault(x => fetchAll || x.SomeField == someField);

インライン化することもできsomeFieldますが、クエリ内でnullか空かをチェックするよりも、上記の方が明確だと思います。

FirstOrDefault述語をとるオーバーロードを使用したことに注意してください。これは、のWhere後にを使用するのと同じFirstOrDefaultですが、もう少し簡潔です。

于 2012-10-24T16:33:49.930 に答える
1

少しサンプルを作成しました。SomeFieldでnullまたは空の値を持つエンティティを取得しています...

これがあなたのために働くことを願っています。

public class MyEntity
{
    public int ID { get; set; }

    public string SomeField { get; set; }
}

static void Main(string[] args)
{
   List<MyEntity> Entities = new List<MyEntity>();
   for (int i = 0; i < 10; i++)
   {
       Entities.Add(new MyEntity()
                   {
                       ID = i,
                       SomeField = "Value " + i.ToString()
                   });
   }

   Entities.Add(new MyEntity() { ID = 10, SomeField = null });
   var entity = Entities.Where(x => string.IsNullOrEmpty(x.SomeField)).FirstOrDefault();
}
于 2012-10-24T16:44:11.497 に答える