Trovare il primo elemento con Linq in C#
Tramite C# Linq (.NET 3.5) è possibile cercare in una collezione di oggetti un elemento che soddisfa determinati requisiti.
La sintassi di una query Linq base è:
su ogni oggetto sono disponibili anche gli extension method, in questo caso First la cui sintassi è:
Simile a First c'è anche Single che ritorna un elemento solo se questo è univoco altrimenti solleva un eccezione di tipo InvalidOperationException
La stessa eccezione viene sollevata anche se nessun elemento soddisfa la condizione di ricerca. Per evitare l'eccezione si possono usare i metodi FirstOrDefault o SingleOrDefault
se non trova nessun elemento ritorna null.
La sintassi di una query Linq base è:
C#
var <variableName> = from <objectAlias> where <conditions> select <objectAlias>
C#
public class TestLinq
{
public int ID { get; set; }
public string Name { get; set; }
public DateTime Modified { get; set; }
}
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//sample data
List<TestLinq> entities = new List<TestLinq>()
{
new TestLinq{ID=1, Name="Milano", Modified=new DateTime(2009,06,8)}
,new TestLinq{ID=2, Name="Monza", Modified=new DateTime(2009,06,28)}
,new TestLinq{ID=3, Name="Lecco", Modified=DateTime.Now}
,new TestLinq{ID=4, Name="Como", Modified=DateTime.Now.AddDays(-1)}
,new TestLinq{ID=4, Name="Pavia", Modified=new DateTime(2009,06,27)}
};
//sample 1
var find1 = (from t in entities
where t.ID == 2
select t).First();
//sample 2
var find2 = entities.Find(t => t.ID == 2);
//sample 3 with explicit cast
TestLinq find3 = entities.Find(t => t.ID == 2);
}
}
C#
<object>.First(<objectAlias> => <conditions>);
C#
//sample 4 - return an element
var find4 = entities.Single(t => t.ID == 3);
//sample 5 - throw exception
var find5 = entities.Single(t => t.ID == 4);
C#
//sample 6
var find6 = entities.FirstOrDefault(t => t.ID >= 7);