Läs på engelska

Dela via


Initieringsuttryck

Ett initieringsuttryck initierar ett nytt objekt. De flesta initieringsuttryck stöds, inklusive de flesta nya initieringsuttrycken C# 3.0 och Visual Basic 9.0. Följande typer kan initieras och returneras av en LINQ till entitetsfråga:

  • En samling med noll eller fler typinskrivna entitetsobjekt eller en projektion av komplexa typer som definieras i den konceptuella modellen.

  • CLR-typer som stöds av Entity Framework.

  • Infogade samlingar.

  • Anonyma typer.

Initiering av anonym typ visas i följande exempel i frågeuttryckssyntax:

Decimal totalDue = 200;
using (AdventureWorksEntities context = new AdventureWorksEntities())
{
    var salesInfo =
        from s in context.SalesOrderHeaders
        where s.TotalDue >= totalDue
        select new { s.SalesOrderNumber, s.TotalDue };

    Console.WriteLine("Sales order numbers:");
    foreach (var sale in salesInfo)
    {
        Console.WriteLine("Order number: " + sale.SalesOrderNumber);
        Console.WriteLine("Total due: " + sale.TotalDue);
        Console.WriteLine("");
    }
}

Följande exempel i metodbaserad frågesyntax visar initiering av anonym typ:

Decimal totalDue = 200;
using (AdventureWorksEntities context = new AdventureWorksEntities())
{

    var salesInfo =
        context.SalesOrderHeaders
        .Where(s => s.TotalDue >= totalDue)
        .Select(s => new { s.SalesOrderNumber, s.TotalDue });

    Console.WriteLine("Sales order numbers:");
    foreach (var sale in salesInfo)
    {
        Console.WriteLine("Order number: " + sale.SalesOrderNumber);
        Console.WriteLine("Total due: " + sale.TotalDue);
        Console.WriteLine("");
    }
}

Användardefinierad klassinitiering stöds också. Initieringsmönstret C# 3.0 och Visual Basic 9.0 stöds och förutsätter att egenskaps getter och setter är symmetriska. Följande exempel i frågeuttryckssyntaxen visar en anpassad klass som initieras i frågan:

class MyOrder { public string SalesOrderNumber; public DateTime? ShipDate; }
Decimal totalDue = 200;
using (AdventureWorksEntities context = new AdventureWorksEntities())
{
    IQueryable<MyOrder> salesInfo =
        from s in context.SalesOrderHeaders
        where s.TotalDue >= totalDue
        select new MyOrder
        {
            SalesOrderNumber = s.SalesOrderNumber,
            ShipDate = s.ShipDate
        };

    Console.WriteLine("Sales order info:");
    foreach (MyOrder order in salesInfo)
    {
        Console.WriteLine("Order number: " + order.SalesOrderNumber);
        Console.WriteLine("Ship date: " + order.ShipDate);
        Console.WriteLine("");
    }
}

I följande exempel i metodbaserad frågesyntax visas en anpassad klass som initieras i frågan:

Decimal totalDue = 200;
using (AdventureWorksEntities context = new AdventureWorksEntities())
{
    IQueryable<MyOrder> salesInfo =
        context.SalesOrderHeaders
        .Where(s => s.TotalDue >= totalDue)
        .Select(s => new MyOrder
        {
            SalesOrderNumber = s.SalesOrderNumber,
            ShipDate = s.ShipDate
        });

    Console.WriteLine("Sales order info:");
    foreach (MyOrder order in salesInfo)
    {
        Console.WriteLine("Order number: " + order.SalesOrderNumber);
        Console.WriteLine("Ship date: " + order.ShipDate);
        Console.WriteLine("");
    }
}

Se även