我正在尝试仅使用此Lambda语句获取具有详细信息的标头
list = list.Where(c=> c.CustomerSalesPeople.Count>0);
但是当我尝试返回结果时,我得到一个null异常
return list.OrderBy(c => c.CustomerName).ToList();
我已经逐步完成代码,看到在执行第一个语句后立即生成了null异常。有没有更好的方法来实现这一目标。
修改
我尝试了这些建议,但我仍然得到一个空值。我想我会试着更好地解释一下。我需要一个匹配此Query
的Lambda表达式 SELECT *
FROM [customer]
where customer_record_id in (select distinct(customer_id)from customer_sales_person)
答案 0 :(得分: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提供了出色的扩展方法来计算何时找到空结果集。 他们在这里:
这样做:
List<int> uniqueIds= listOfCustomerSalesPerson.Select(s=>s.Id).ToList().Distinct();
var requireListOfCustomers = GetAllCustomers().Where(s=>uniqueIds.Contains(s.id);
你也可以将这两个单独的调用嵌入到一个中。但是根据您使用的数据提供商的类型,它可能会给您一个错误,例如“use only primitive types”。因此会有单独的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
答案 1 :(得分:0)
您的集合中可以包含null元素。尝试检查where语句
中的空值return list != null ?
list.Where(c=> c!=null && c.CustomerSalesPeople.Count>0).
OrderBy(c => c.CustomerName).ToList()
:null;