• LINQ LINQ Operators and Lambda Expression


    LINQ is a cool feature in C# 3.0. Most of the developers are struggling for the syntax and examples. Here I have collected various examples for each operator in LINQ and the equivalent Lambda Expressions.

    Where

    IEnumerable<Product> x = products.Where(p => p.UnitPrice >= 10);

    IEnumerable<Product> x =
        from p in products
        where p.UnitPrice >= 10
        select p;

    Select

    IEnumerable<string> productNames = products.Select(p => p.Name);

    IEnumerable<string> productNames = from p in products select p.Name;

    var namesAndPrices =
        products.
        Where(p => p.UnitPrice >= 10).
        Select(p => new { p.Name, p.UnitPrice }).
        ToList();
    IEnumerable<int> indices =
        products.
        Select((product, index) => new { product, index }).
        Where(x => x.product.UnitPrice >= 10).
        Select(x => x.index);

    SelectMany

    IEnumerable<Order> orders =
        customers.
        Where(c => c.Country == "Denmark").
        SelectMany(c => c.Orders);
    var namesAndOrderIDs =
        customers.
        Where(c => c.Country == "Denmark").
        SelectMany(c => c.Orders).
        Where(o => o.OrderDate.Year == 2005).
        Select(o => new { o.Customer.Name, o.OrderID });
    var namesAndOrderIDs =
        customers.
        Where(c => c.Country == "Denmark").
        SelectMany(c => c.Orders, (c,o) => new { c, o }).
        Where(co => co.o.OrderDate.Year == 2005).
        Select(co => new { co.c.Name, co.o.OrderID });

    var namesAndOrderIDs =
        from c in customers
        where c.Country == "Denmark"
        from o in c.Orders
        where o.OrderDate.Year == 2005
        select new { c.Name, o.OrderID };

    Take

    IEnumerable<Product> MostExpensive10 =
        products.OrderByDescending(p => p.UnitPrice).Take(10);

    Skip

    IEnumerable<Product> AllButMostExpensive10 =
        products.OrderByDescending(p => p.UnitPrice).Skip(10);

    TakeWhile SkipWhile

    s.TakeWhile(p)s.SkipWhile(p)

    Join

    var custOrders =
        customers.
        Join(orders, c => c.CustomerID, o => o.CustomerID,
            (c, o) => new { c.Name, o.OrderDate, o.Total }
        );
    var custOrders =
        from c in customers
        join o in orders on c.CustomerID equals o.CustomerID
        select new { c.Name, o.OrderDate, o.Total };

    GroupJoin

    var custTotalOrders =
        customers.
        GroupJoin(orders, c => c.CustomerID, o => o.CustomerID,
            (c, co) => new { c.Name, TotalOrders = co.Sum(o => o.Total) }
        );
    var custTotalOrders =
        from c in customers
        join o in orders on c.CustomerID equals o.CustomerID into co
        select new { c.Name, TotalOrders = co.Sum(o => o.Total) };
    var custTotalOrders =
        from c in customers
        join o in orders on c.CustomerID equals o.CustomerID
        select new { c.Name, o.OrderDate, o.Total };
    var custTotalOrders =
        from c in customers
        join o in orders on c.CustomerID equals o.CustomerID into co
        from o in co
        select new { c.Name, o.OrderDate, o.Total };
    var custTotalOrders =
        from c in customers
        join o in orders on c.CustomerID equals o.CustomerID into co
        from o in co.DefaultIfEmpty(emptyOrder)
        select new { c.Name, o.OrderDate, o.Total };

    Concat

    IEnumerable<string> locations =
        customers.Select(c => c.City).
        Concat(customers.Select(c => c.Region)).
        Concat(customers.Select(c => c.Country)).
        Distinct();

    IEnumerable<string> locations =
        new[] {
            customers.Select(c => c.City),
            customers.Select(c => c.Region),
            customers.Select(c => c.Country),
        }.
        SelectMany(s => s).
        Distinct();

    OrderBy / ThenBy

    IEnumerable<Product> orderedProducts1 =
        products.
        OrderBy(p => p.Category).
        ThenByDescending(p => p.UnitPrice).
        ThenBy(p => p.Name);
    IEnumerable<Product> orderedProducts1 =
        from p in products
        orderby p.Category, p.UnitPrice descending, p.Name
        select p;
    IEnumerable<Product> orderedProducts2 =
        products.
        Where(p => p.Category == "Beverages").
        OrderBy(p => p.Name, StringComparer.CurrentCultureIgnoreCase);
    IEnumerable<string> orderedProductNames =
        products.
        Where(p => p.Category == "Beverages").
        Select(p => p.Name).
        OrderBy(x => x);

    GroupBy

    IEnumerable<IGrouping<string, Product>> productsByCategory =
        products.GroupBy(p => p.Category);
    IEnumerable<IGrouping<string, string>> productNamesByCategory =
        products.GroupBy(p => p.Category, p => p.Name);

    Distinct

    IEnumerable<string> productCategories =
        products.Select(p => p.Category).Distinct();

    AsEnumerable

    Table<Customer> custTable = GetCustomersTable();
    var query = custTable.AsEnumerable().Where(c => IsGoodCustomer(c));

    ToArray

    string[] customerCountries =
        customers.Select(c => c.Country).Distinct().ToArray();

    ToList

    List<Customer> customersWithOrdersIn2005 =
        customers.
        Where(c => c.Orders.Any(o => o.OrderDate.Year == 2005)).
        ToList();

    ToDictionary

    Dictionary<int,Order> orders =
        customers.
        SelectMany(c => c.Orders).
        Where(o => o.OrderDate.Year == 2005).
        ToDictionary(o => o.OrderID);
    Dictionary<string,decimal> categoryMaxPrice =
        products.
        GroupBy(p => p.Category).
        ToDictionary(g => g.Key, g => g.Group.Max(p => p.UnitPrice));

    ToLookup

    Lookup<string,Product> productsByCategory =
        products.ToLookup(p => p.Category);
    IEnumerable<Product> beverages = productsByCategory["Beverage"];

    OfType

    List<Person> persons = GetListOfPersons();
    IEnumerable<Employee> employees = persons.OfType<Employee>();

    Cast

          ArrayList objects = GetOrders();
    IEnumerable<Order> ordersIn2005 =
        objects.
        Cast<Order>().
        Where(o => o.OrderDate.Year == 2005);
    ArrayList objects = GetOrders();
    IEnumerable<Order> ordersIn2005 =
        from Order o in objects
        where o.OrderDate.Year == 2005
        select o;

    First

    string phone = "206-555-1212";
    Customer c = customers.First(c => c.Phone == phone);

    Single

    int id = 12345;
    Customer c = customers.Single(c => c.CustomerID == id);

    ElementAt

    Product thirdMostExpensive =
        products.OrderByDescending(p => p.UnitPrice).ElementAt(2);

    Range

    int[] squares = Enumerable.Range(0, 100).Select(x => x * x).ToArray();

    Repeat

    long[] x = Enumerable.Repeat(-1L, 256).ToArray();

    Empty

    IEnumerable<Customer> noCustomers = Enumerable.Empty<Customer>();

    Any

    bool b = products.Any(p => p.UnitPrice >= 100 && p.UnitsInStock == 0);

    All

    IEnumerable<string> fullyStockedCategories =
        products.
        GroupBy(p => p.Category).
        Where(g => g.Group.All(p => p.UnitsInStock > 0)).
        Select(g => g.Key);

    Count

    int count = customers.Count(c => c.City == "London");

    Sum

    int year = 2005;
    var namesAndTotals =
        customers.
        Select(c => new {
            c.Name,
            TotalOrders =
                c.Orders.
                Where(o => o.OrderDate.Year == year).
                Sum(o => o.Total)
        });

    Min

    var minPriceByCategory =
        products.
        GroupBy(p => p.Category).
        Select(g => new {
            Category = g.Key,
            MinPrice = g.Group.Min(p => p.UnitPrice)
        });

    Max

    decimal largestOrder =
        customers.
        SelectMany(c => c.Orders).
        Where(o => o.OrderDate.Year == 2005).
        Max(o => o.Total);

    Average

    var averageOrderTotals =
        customers.
        Select(c => new {
            c.Name,
            AverageOrderTotal = c.Orders.Average(o => o.Total)
        });

    Aggregate

    var longestNamesByCategory =
        products.
        GroupBy(p => p.Category).
        Select(g => new {
            Category = g.Key,
            LongestName =
                g.Group.
                Select(p => p.Name).
               
    Aggregate((s, t) => t.Length > s.Length ? t : s)
        });

     

    http://www.c-sharpcorner.com/uploadfile/babu_2082/linq-operators-and-lambda-expression-syntax-examples

  • 相关阅读:
    169_Majority Element
    171_Excel Sheet Column Number
    217_Contains Duplicate
    242_Valid Anagram
    【findIndex】根据数组对象某一元素的id,找到此元素在数组所在的位置
    【鼠标右击组件】v-contextmenu
    【 拖拽组件】基于 Sortable.js 的 Vue 拖拽组件。 访问地址:Vue.Draggable
    【vue-markdown编辑器】vue-markdown 组件github地址
    mac下如何制作windows启动盘
    【vue webstorm】WebStorm Vue代码格式错误
  • 原文地址:https://www.cnblogs.com/dyg540/p/4971152.html
Copyright © 2020-2023  润新知