0

我正在尝试仅使用此 Lambda 语句获取具有详细信息的标头

list = list.Where(c=> c.CustomerSalesPeople.Count>0);

但是当我尝试返回结果时出现空异常

return list.OrderBy(c => c.CustomerName).ToList();

我已经单步执行了代码,并看到在执行第一条语句后立即生成了 null 异常。有没有更好的方法来实现这一点。

编辑

我尝试了这些建议,但我仍然得到一个空值。我想我会尝试更好地解释。我需要一个匹配此查询的 Lambda 表达式

    SELECT *
  FROM [customer]
  where customer_record_id in (select distinct(customer_id)from customer_sales_person)
4

2 回答 2

1
list = list.Where(c=>c.CustomerSalesPeople.Count>0).SingleOrDefault();

if(list!=null)
  return list.OrderBy(c=>c.CustomerName).ToList();

return list;

或者,如果您认为,CustomerSalesPeople可以为 null,那么您可以这样做:

list = list.Where(c=>(c.CustomerSalesPeople==null) ||(c.CustomerSalesPeople.Count>0));

if(list!=null)
  return list.OrderBy(c=>c.CustomerName).ToList();

return list;

您也可以查看.DefaultIfEmpty()扩展名。

当发现空结果集时,Linq 提供了出色的扩展方法来应对。他们来了:

  1. .FirstOrDefault()
  2. .DefaultIfEmpty()
  3. .SingleOrDefault()

更新:

做这个:

   List<int> uniqueIds= listOfCustomerSalesPerson.Select(s=>s.Id).ToList().Distinct();
   var requireListOfCustomers = GetAllCustomers().Where(s=>uniqueIds.Contains(s.id);

不过,您也可以将这两个单独的调用嵌入到一个中。但是根据您使用的数据提供者的种类,它可能会给您一个错误,例如“仅使用原始类型”。因此,单独的 id 列表。

例如,如果您使用的是 EntityFramework 5.0 和 SQL Server,则可以这样做。

myDbContext db= new myDbContext();
var requiredList = db.Customers.Where(s=>
                               (s.CustomerSalesPeople ==null)
                               ||
                               (s.CustomerSalesPeople.Select(o=>o.Id).Contains(s.Id))
                               ).ToList();

我假设,客户包含List<CustomerSalesPeople>db.CustomerSalesPeople否则可能

于 2013-02-25T07:38:04.563 回答
0

您的集合中可以有 null 元素。尝试检查 where 语句中的空值

return list != null ? 
   list.Where(c=> c!=null && c.CustomerSalesPeople.Count>0).
   OrderBy(c => c.CustomerName).ToList()
   :null;
于 2013-02-25T07:38:34.373 回答