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 è:
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);
  }
}
su ogni oggetto sono disponibili anche gli extension method, in questo caso First la cui sintassi è:
C#
<object>.First(<objectAlias> => <conditions>);
Simile a First c'è anche Single che ritorna un elemento solo se questo è univoco altrimenti solleva un eccezione di tipo InvalidOperationException
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);
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
C#
//sample 6
    var find6 = entities.FirstOrDefault(t => t.ID >= 7);
se non trova nessun elemento ritorna null.
Potrebbe interessarti anche: