I find myself writing a lot of code like this to select one item that matches
var item = (from x in Items where x.Id == 123 select x).First();
Is there a cleaner way of doing it or is this as concise as I’m going to get?
EDIT: Should have said “Cleaner way using linq syntax”. I was already aware of the lambda syntax and it’s starting to look like this is actually the only way. I did get some useful info though, so thanks to everyone who replied.
Depends how much you like the linq query syntax, you can use the extension methods directly like:
And if you don’t want to throw an error if the list is empty, use
FirstOrDefaultwhich returns the default value for the element type (nullfor reference types):Single()andSingleOrDefault()can also be used, but if you are reading from a database or something that already guarantees uniqueness I wouldn’t bother as it has to scan the list to see if there’s any duplicates and throws.First()andFirstOrDefault()stop on the first match, so they are more efficient.Of the
First()andSingle()family, here’s where they throw:First()– throws if empty/not found, does not throw if duplicateFirstOrDefault()– returns default if empty/not found, does not throw if duplicateSingle()– throws if empty/not found, throws if duplicate existsSingleOrDefault()– returns default if empty/not found, throws if duplicate exists