Best way to determined null or count 0
我有一个IQueryable,我需要知道它是空的还是没有值。
1 2 3 4 5 6 7 8 | IQueryable<people> L = (from p in people where p.lastname.Contains("y") select p); if (L != null && L.Count() > 0) { return"Something"; } else { return"NOTHING"; } |
如果你使用
建议您使用
1 2 3 4 5 6 7 8 | IQueryable<people> L = (from p in people where p.lastname.Contains("y") select p); if (L.Any()) { return"Something"; } else { return"NOTHING"; } |
我需要可以查询吗?< BR>通过使用singleOrDefault(),它将是一个人(person?)或无效(假定人是一个阶级)
1 2 3 4 5 6 7 | var result = (from p in people where p.lastname.Contains("y") select p).SingleOrDefault(); return result == null ?"NOTHING" :"Something"; |
其他:singleOrDefault()是您想要使用的吗?您是指firstOrDefault()还是指any()?
也许linq:何时使用singleOrDefault与firstOrDefault()以及筛选条件会有所帮助。
HTH,
艾伦。
使用.any方法的示例
1 | return people.Any(p => p.lastname.Contains("y")) ?"something" :"nothing"; |
这是一个示例,如果.any返回true,则返回IQueryable,但是它可能效率太低,因为它需要两次到数据库的往返。我相信只要有足够的时间和思考,一个更好的方法是可以被写出来的。
1 2 | return sis.Students.Any(p => p.LastName.Contains("y")) ? people.Where(p => p.lastname.Contains("y")) :"nothing"; |
Linq Any vs FirstOrDefault的表现!=空
值得一提的是,这其中的一部分取决于您的供应商。iqueryable只是暗示了一个意图。如果它是linq2sql或其他什么,那么yes l.count()将请求更多的资源-除了您在上面的行中也调用singleOrDefault,这意味着您只需要进行空检查,但是您的类型不匹配…
如果我对一个Linq提供程序运行此语句,我会自己编写(或Amazon,或任何其他给定的Linq提供程序)。Count()可能更快,这取决于提供程序正在做什么,但如果您使用的是通常的Microsoft Linq to SQL实现,则您的假设是成立的。