I have an enum called OrderStatus, and it contains various statuses that an Order can be in:
- Created
- Pending
- Waiting
- Valid
- Active
- Processed
- Completed
What I want to do is create a LINQ statement that will tell me if the OrderStaus is Valid, Active, Processed or Completed.
Right now I have something like:
var status in Order.Status.WHERE(status =>
status.OrderStatus == OrderStatus.Valid ||
status.OrderStatus == OrderStatus.Active||
status.OrderStatus == OrderStatus.Processed||
status.OrderStatus == OrderStatus.Completed)
That works, but it’s very “wordy”. Is there a way to convert this to a Contains() statement and shorten it up a bit?
Sure:
You could also define an extension method
In()that would accept an object and a params array, and basically wraps the Contains function:This allows you to specify the condition in a more SQL-ish way:
Understand that not all Linq providers like custom extension methods in their lambdas. NHibernate, for instance, won’t correctly translate the In() function without additional coding to extend the expression parser, but Contains() works just fine. For Linq 2 Objects, no problems.