2012-07-09 58 views
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); 

我得到异常哪些错误与此LINQ查询

[ 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'. ] 
+0

什么'Item'在(例如)a.ItemNo =='Item'.ItemNo – 2012-07-09 06:10:14

+0

项目是表或 – 2012-07-09 06:18:44

+0

类的对象尽我编辑的代码.... – 2012-07-09 06:29:38

回答

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看到this question。您可以重新编写您的查询,如:

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(); 
+0

是越来越相同的错误....真的吸吮 – 2012-07-10 12:47:51

+0

@KapsHasija究竟是什么错误,你越来越? – James 2012-07-10 12:49:40

+0

我得到相同的错误[参数#= 1,函数名称(如果知道)= isnull] – 2012-07-11 04:29:54

0

编辑 尝试这样

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

代码soemthing对你来说是

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 SOT帽子它满足你的条件...


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

int? ItemNo { get; set; } 

和试用soemthing这样

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 
+0

我的产品编号列是字符串类型,所以我必须做什么? – 2012-07-09 06:23:38

+0

我越来越相同的错误[参数#= 1,功能名称(如果知道)= isnull] – 2012-07-11 04:29:43