2
var item1 = (from a in db.Item
                         where
                         (a.ItemNo == Item.ItemNo ||  Item.ItemNo==null ) &&
                         (a.StatusId == Item.StatusId || Item.StatusId == 0) &&
                           (a.LocationId == Item.LocationId || Item.LocationId == 0)
                         select a).ToList();

            return View(item1);

例外が発生しています

[ Argument # = 1,Name of function(if known) = isnull ]

私もこのコードを試しました

 var item1 = (from a in db.Item
                         where
                         (a.ItemNo == Item.ItemNo ||  Item.ItemNo=="") &&
                         (a.StatusId == Item.StatusId || Item.StatusId == 0) &&
                           (a.LocationId == Item.LocationId || Item.LocationId == 0)
                         select a).ToList();

            return View(item1);

しかし、エラーが発生して動作していません

[String truncation: max=0, len=2, value='10'. ]
4

2 に答える 2

1

同じ問題かどうかを確認するには、Lamdba 式として記述してみてください。

var item1 = db.Item.Where(a => (String.IsNullOrEmpty(Item.ItemNo) || a.ItemNo == Item.ItemNo) &&
                               (Item.StatusId == 0 || a.StatusId == Item.StatusId) &&
                               (Item.LocationId == 0 || a.LocationId == Item.LocationId)).FirstOrDefault();

return View(item1); 

アップデート

EF はこの質問String.IsNullOrEmptyを参照してサポートしていないようです。次のようにクエリを書き直すことができます。

var item1 = db.Item.Where(a => ((Item.ItemNo == null || Item.ItemNo == String.Empty) || a.ItemNo == Item.ItemNo) &&
                               (Item.StatusId == 0 || a.StatusId == Item.StatusId) &&
                               (Item.LocationId == 0 || a.LocationId == Item.LocationId))
                   .FirstOrDefault();

それでも null のチェックに問題がある場合は、クエリを分割することができます。

var query = db.Item.Where(a => (Item.StatusId == 0 || a.StatusId == Item.StatusId) &&
                               (Item.LocationId == 0 || a.LocationId == Item.LocationId));

if (!String.IsNullOrEmpty(Item.ItemNo))
{
    query = query.Where(a => a.ItemNo == Item.ItemNo);
}

var item1 = query.FirstOrDefault();
于 2012-07-09T09:43:37.417 に答える
0

編集 このようなものを試してみてください

 string.IsNullOrEmpty(Item.ItemNo) ? a.ItemNo==a.ItemNo
                  : a.ItemNo == Item.ItemNo;

あなたのためのコードは

var item1 = (from a in db.Item 
                    where
                    ( string.IsNullOrEmpty(Item.ItemNo) ? a.ItemNo==a.ItemNo
                  : a.ItemNo == Item.ItemNo; ) &&
                     ..more

の値Item.ItemNoがnullまたは空である場合はa.ItemNo==a.ItemNo、条件を満たす必要があることに注意してください...


itmenoフィールドが以下のようにnull許容であることを確認してください

int? ItemNo { get; set; } 

そして、このようなものを試してみてください

Item.ItemNo == null ? a.ItemNo : a.ItemNo == Item.ItemNo 

だからそれは

var item1 = (from a in db.Item 
                    where
                    ( Item.ItemNo == null ? a.ItemNo : a.ItemNo == Item.ItemNo ) &&
                     ..more
于 2012-07-09T06:13:04.460 に答える