LINQ – 如果条件

前端之家收集整理的这篇文章主要介绍了LINQ – 如果条件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
代码中,注释部分是我需要解决的问题…有没有办法在LINQ中编写这样的查询?我需要这个,因为我需要根据状态进行排序.
  1. var result = (
  2. from contact in db.Contacts
  3. join user in db.Users on contact.CreatedByUserID equals user.UserID
  4. join deal in db.Deals on contact.ContactID equals deal.ContactID into deals
  5. orderby contact.ContactID descending
  6. select new ContactListView
  7. {
  8. ContactID = contact.ContactID,FirstName = contact.FirstName,LastName = contact.LastName,Email = contact.Email,Deals = deals.Count(),EstValue = deals.Sum(e => e.EstValue),SalesAgent = user.FirstName + " " + user.LastName,Tasks = 7,// This is critical part
  9. if(Deals == 0) Status = "Prospect";
  10. else
  11. Status = "Client";
  12. // End of critical part...
  13. })
  14. .OrderBy(filterQuery.OrderBy + " " + filterQuery.OrderType)
  15. .Where(filterQuery.Status);

解决方法

  1. Status = (deals.Count() == 0 ? "Prospect" : "Client")

这使用了“Conditional operator”

The conditional operator (?:) returns
one of two values depending on the
value of a Boolean expression.

编辑:你可以像这样组合:

  1. Status = (deals.Count() == 0 ? "Prospect" : (deals.Count() == 1 ? "Client" : "Other"))

在这种情况下,您正在使用deals.Count(),因此您可以使用LINQ let语法将结果存储在临时变量中:

  1. var result = (
  2. from contact in db.Contacts
  3. join user in db.Users on contact.CreatedByUserID equals user.UserID
  4. join deal in db.Deals on contact.ContactID equals deal.ContactID into deals
  5. let dealCount = deals.Count()
  6. ... // Continue here
  7. Status = (dealCount == 0 ? "Prospect" : (dealCount == 1 ? "Client" : "Other"))

猜你在找的MsSQL相关文章