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.ItemNonull 或为空,则应该a.ItemNo==a.ItemNo满足您的条件...


确保您的 itmeno 字段可以为空,如下所示

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 回答