Linq復雜對象查詢


復雜的查詢對象,

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LinqDemo
{
    class Customer
    {
        public string ID { get; set; }
        public string City { get; set; }
        public string Country { get; set; }
        public string Region { get; set; }
        public decimal Sales { get; set; }
        public override string ToString()
        {
            return "ID:" + ID + " City:" + City + " Country:" + Country + " Region:" + Region + " Sales:" + Sales;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            List<Customer> customers = new List<Customer>
            {
                new Customer {ID="A",City="New York",Country="USA",Region="North America",Sales=999 },
                new Customer {ID="B",City="Bei Jing",Country="China",Region="Asia",Sales=1999 },
                new Customer {ID="C",City="Shang Hai",Country="China",Region="Asia",Sales=9999 },
                new Customer {ID="D",City="Tokyo",Country="Japan",Region="Asia",Sales=2999 },
                new Customer {ID="E",City="London",Country="England",Region="Europe",Sales=3999 }
            };

            var queryResults = from c in customers
                               where c.Region == "Asia"
                               select c;
            Console.WriteLine("亞洲的有:");
            foreach (Customer c in queryResults)
            {
                Console.WriteLine(c);
            }

            Console.ReadLine();
        }
    }
}

查詢對象的某個元素

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LinqDemo
{
    class Customer
    {
        public string ID { get; set; }
        public string City { get; set; }
        public string Country { get; set; }
        public string Region { get; set; }
        public decimal Sales { get; set; }
        public override string ToString()
        {
            return "ID:" + ID + " City:" + City + " Country:" + Country + " Region:" + Region + " Sales:" + Sales;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            List<Customer> customers = new List<Customer>
            {
                new Customer {ID="A",City="New York",Country="USA",Region="North America",Sales=999 },
                new Customer {ID="B",City="Bei Jing",Country="China",Region="Asia",Sales=1999 },
                new Customer {ID="C",City="Shang Hai",Country="China",Region="Asia",Sales=9999 },
                new Customer {ID="D",City="Tokyo",Country="Japan",Region="Asia",Sales=2999 },
                new Customer {ID="E",City="London",Country="England",Region="Europe",Sales=3999 }
            };

            var queryResults = from c in customers
                               where c.Region == "Asia"
                               select c.City;
            Console.WriteLine("亞洲的城市有:");
            foreach (String city in queryResults)
            {
                Console.WriteLine(city);
            }

            Console.ReadLine();
        }
    }
}

查詢結果只能是字符串,或者一個對象

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LinqDemo
{
    class Customer
    {
        public string ID { get; set; }
        public string City { get; set; }
        public string Country { get; set; }
        public string Region { get; set; }
        public decimal Sales { get; set; }
        public override string ToString()
        {
            return "ID:" + ID + " City:" + City + " Country:" + Country + " Region:" + Region + " Sales:" + Sales;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            List<Customer> customers = new List<Customer>
            {
                new Customer {ID="A",City="New York",Country="USA",Region="North America",Sales=999 },
                new Customer {ID="B",City="Bei Jing",Country="China",Region="Asia",Sales=1999 },
                new Customer {ID="C",City="Shang Hai",Country="China",Region="Asia",Sales=9999 },
                new Customer {ID="D",City="Tokyo",Country="Japan",Region="Asia",Sales=2999 },
                new Customer {ID="E",City="London",Country="England",Region="Europe",Sales=3999 }
            };

            var queryResults = from c in customers
                               where c.Region == "Asia"
                               select new { c.City, c.Country };
            Console.WriteLine("亞洲的有:");
            foreach (Object item in queryResults)
            {
                Console.WriteLine(item);
            }

            Console.ReadLine();
        }
    }
}

用Select函數

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LinqDemo
{
    class Customer
    {
        public string ID { get; set; }
        public string City { get; set; }
        public string Country { get; set; }
        public string Region { get; set; }
        public decimal Sales { get; set; }
        public override string ToString()
        {
            return "ID:" + ID + " City:" + City + " Country:" + Country + " Region:" + Region + " Sales:" + Sales;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            List<Customer> customers = new List<Customer>
            {
                new Customer {ID="A",City="New York",Country="USA",Region="North America",Sales=999 },
                new Customer {ID="B",City="Bei Jing",Country="China",Region="Asia",Sales=1999 },
                new Customer {ID="C",City="Shang Hai",Country="China",Region="Asia",Sales=9999 },
                new Customer {ID="D",City="Tokyo",Country="Japan",Region="Asia",Sales=2999 },
                new Customer {ID="E",City="London",Country="England",Region="Europe",Sales=3999 }
            };

            //var queryResults = from c in customers
            //                   where c.Region == "Asia"
            //                   select new { c.City, c.Country };
            var queryResults = customers.Where(c => c.Region == "Asia").Select(c => new { c.City, c.Country });
            Console.WriteLine("亞洲的有:");
            foreach (Object item in queryResults)
            {
                Console.WriteLine(item);
            }

            Console.ReadLine();
        }
    }
}

去重處理Distinct方法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LinqDemo
{
    class Customer
    {
        public string ID { get; set; }
        public string City { get; set; }
        public string Country { get; set; }
        public string Region { get; set; }
        public decimal Sales { get; set; }
        public override string ToString()
        {
            return "ID:" + ID + " City:" + City + " Country:" + Country + " Region:" + Region + " Sales:" + Sales;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            List<Customer> customers = new List<Customer>
            {
                new Customer {ID="A",City="New York",Country="USA",Region="North America",Sales=999 },
                new Customer {ID="B",City="Bei Jing",Country="China",Region="Asia",Sales=1999 },
                new Customer {ID="C",City="Shang Hai",Country="China",Region="Asia",Sales=9999 },
                new Customer {ID="D",City="Tokyo",Country="Japan",Region="Asia",Sales=2999 },
                new Customer {ID="E",City="London",Country="England",Region="Europe",Sales=3999 }
            };

            //var queryResults = from c in customers
            //                   where c.Region == "Asia"
            //                   select new { c.City, c.Country };
            var queryResults = customers.Select(c => c.Region).Distinct();
            Console.WriteLine("洲有:");
            foreach (Object item in queryResults)
            {
                Console.WriteLine(item);
            }

            Console.ReadLine();
        }
    }
}

any,All查詢

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LinqDemo
{
    class Customer
    {
        public string ID { get; set; }
        public string City { get; set; }
        public string Country { get; set; }
        public string Region { get; set; }
        public decimal Sales { get; set; }
        public override string ToString()
        {
            return "ID:" + ID + " City:" + City + " Country:" + Country + " Region:" + Region + " Sales:" + Sales;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            List<Customer> customers = new List<Customer>
            {
                new Customer {ID="A",City="New York",Country="USA",Region="North America",Sales=999 },
                new Customer {ID="B",City="Bei Jing",Country="China",Region="Asia",Sales=1999 },
                new Customer {ID="C",City="Shang Hai",Country="China",Region="Asia",Sales=9999 },
                new Customer {ID="D",City="Tokyo",Country="Japan",Region="Asia",Sales=2999 },
                new Customer {ID="E",City="London",Country="England",Region="Europe",Sales=3999 }
            };


            // Any All
            bool anyUSA = customers.Any(c => c.Country == "USA");
            if (anyUSA)
            {
                Console.WriteLine("有些人是美國的");
            }
            else
            {
                Console.WriteLine("沒有美國的");
            }

            bool allAsia = customers.All(c => c.Region == "Asia");
            if (allAsia)
            {
                Console.WriteLine("全是亞洲的人");
            }
            else
            {
                Console.WriteLine("不全是亞洲的人");
            }

            Console.ReadLine();
        }
    }
}

多級排序

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LinqDemo
{
    class Customer
    {
        public string ID { get; set; }
        public string City { get; set; }
        public string Country { get; set; }
        public string Region { get; set; }
        public decimal Sales { get; set; }
        public override string ToString()
        {
            return "ID:" + ID + " City:" + City + " Country:" + Country + " Region:" + Region + " Sales:" + Sales;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            List<Customer> customers = new List<Customer>
            {
                new Customer {ID="A",City="New York",Country="USA",Region="North America",Sales=999 },
                new Customer {ID="B",City="Bei Jing",Country="China",Region="Asia",Sales=1999 },
                new Customer {ID="C",City="Shang Hai",Country="China",Region="Asia",Sales=9999 },
                new Customer {ID="D",City="Tokyo",Country="Japan",Region="Asia",Sales=2999 },
                new Customer {ID="E",City="London",Country="England",Region="Europe",Sales=3999 }
            };

            var queryResults = from c in customers
                               orderby c.Region,c.Country,c.City // 多級排序
                               select new {c.Region , c.Country, c.City };
            Console.WriteLine("亞洲的有:");
            foreach (Object item in queryResults)
            {
                Console.WriteLine(item);
            }

            Console.ReadLine();
        }
    }
}

使用OrderBy,ThenBy實現

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LinqDemo
{
    class Customer
    {
        public string ID { get; set; }
        public string City { get; set; }
        public string Country { get; set; }
        public string Region { get; set; }
        public decimal Sales { get; set; }
        public override string ToString()
        {
            return "ID:" + ID + " City:" + City + " Country:" + Country + " Region:" + Region + " Sales:" + Sales;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            List<Customer> customers = new List<Customer>
            {
                new Customer {ID="A",City="New York",Country="USA",Region="North America",Sales=999 },
                new Customer {ID="B",City="Bei Jing",Country="China",Region="Asia",Sales=1999 },
                new Customer {ID="C",City="Shang Hai",Country="China",Region="Asia",Sales=9999 },
                new Customer {ID="D",City="Tokyo",Country="Japan",Region="Asia",Sales=2999 },
                new Customer {ID="E",City="London",Country="England",Region="Europe",Sales=3999 }
            };

            //var queryResults = from c in customers
            //                   orderby c.Region,c.Country,c.City // 多級排序
            //                   select new {c.Region , c.Country, c.City };
            var queryResults = customers.OrderBy(c => c.Region)
                .ThenBy(c => c.Country)
                .ThenBy(c => c.City)
                .Select(c => new { c.Region,c.Country, c.City});

            Console.WriteLine("亞洲的有:");
            foreach (Object item in queryResults)
            {
                Console.WriteLine(item);
            }

            Console.ReadLine();
        }
    }
}

group的使用

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LinqDemo
{
    class Customer
    {
        public string ID { get; set; }
        public string City { get; set; }
        public string Country { get; set; }
        public string Region { get; set; }
        public decimal Sales { get; set; }
        public override string ToString()
        {
            return "ID:" + ID + " City:" + City + " Country:" + Country + " Region:" + Region + " Sales:" + Sales;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            List<Customer> customers = new List<Customer>
            {
                new Customer {ID="A",City="New York",Country="USA",Region="North America",Sales=999 },
                new Customer {ID="B",City="Bei Jing",Country="China",Region="Asia",Sales=1999 },
                new Customer {ID="C",City="Shang Hai",Country="China",Region="Asia",Sales=9999 },
                new Customer {ID="D",City="Tokyo",Country="Japan",Region="Asia",Sales=2999 },
                new Customer {ID="E",City="London",Country="England",Region="Europe",Sales=3999 }
            };

            var queryResults = from c in customers
                               group c by c.Region into cg
                               select new { TotalSales = cg.Sum(c => c.Sales),Region = cg.Key };

            var orderedResults =
                from cg in queryResults
                orderby cg.TotalSales descending
                select cg;


            foreach (var item in orderedResults)
            {
                Console.WriteLine(item.TotalSales+"\t:"+item.Region);
            }

            Console.ReadLine();
        }
    }
}

通過Take方法獲取前幾個數據
通過Skip方法,獲取剩下的數據

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LinqDemo
{
    class Customer
    {
        public string ID { get; set; }
        public string City { get; set; }
        public string Country { get; set; }
        public string Region { get; set; }
        public decimal Sales { get; set; }
        public override string ToString()
        {
            return "ID:" + ID + " City:" + City + " Country:" + Country + " Region:" + Region + " Sales:" + Sales;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            List<Customer> customers = new List<Customer>
            {
                new Customer {ID="A",City="New York",Country="USA",Region="North America",Sales=999 },
                new Customer {ID="B",City="Bei Jing",Country="China",Region="Asia",Sales=1999 },
                new Customer {ID="C",City="Shang Hai",Country="China",Region="Asia",Sales=9999 },
                new Customer {ID="D",City="Tokyo",Country="Japan",Region="Asia",Sales=2999 },
                new Customer {ID="E",City="London",Country="England",Region="Europe",Sales=3999 }
            };

            var queryResults = from c in customers
                               group c by c.Region into cg
                               select new { TotalSales = cg.Sum(c => c.Sales),Region = cg.Key };

            var orderedResults =
                from cg in queryResults
                orderby cg.TotalSales descending
                select cg;

            // Take獲取前幾個數據
            // Skip獲取后幾個數據
            // 出去前1個后的數據
            foreach (var item in orderedResults.Skip(1))
            {
                Console.WriteLine(item.TotalSales + "\t:" + item.Region);
            }

            Console.WriteLine("----------------------------------------");

            // 前1個
            foreach (var item in orderedResults.Take(1))
            {
                Console.WriteLine(item.TotalSales + "\t:" + item.Region);
            }


            Console.ReadLine();
        }
    }
}

First與FirstOrDefault

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LinqDemo
{
    class Customer
    {
        public string ID { get; set; }
        public string City { get; set; }
        public string Country { get; set; }
        public string Region { get; set; }
        public decimal Sales { get; set; }
        public override string ToString()
        {
            return "ID:" + ID + " City:" + City + " Country:" + Country + " Region:" + Region + " Sales:" + Sales;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            List<Customer> customers = new List<Customer>
            {
                new Customer {ID="A",City="New York",Country="USA",Region="North America",Sales=999 },
                new Customer {ID="B",City="Bei Jing",Country="China",Region="Asia",Sales=1999 },
                new Customer {ID="C",City="Shang Hai",Country="China",Region="Asia",Sales=9999 },
                new Customer {ID="D",City="Tokyo",Country="Japan",Region="Asia",Sales=2999 },
                new Customer {ID="E",City="London",Country="England",Region="Europe",Sales=3999 }
            };

            var queryResults = from c in customers
                               group c by c.Region into cg
                               select new { TotalSales = cg.Sum(c => c.Sales),Region = cg.Key };

            var orderedResults =
                from cg in queryResults
                orderby cg.TotalSales descending
                select cg;

            // 獲取第一個數據,First和FirstOrDefault
            // First方法如何數據不存在,會報錯
            Console.WriteLine(orderedResults.First());

            Console.WriteLine(orderedResults.FirstOrDefault());

            Console.WriteLine(orderedResults.First(c => c.Region == "Europe"));

            Console.WriteLine(orderedResults.FirstOrDefault(c => c.Region == "Europe"));
            Console.ReadLine();
        }
    }
}

JOIN使用

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LinqDemo
{
    class Customer
    {
        public string ID { get; set; }
        public string City { get; set; }
        public string Country { get; set; }
        public string Region { get; set; }
        public decimal Sales { get; set; }
        public override string ToString()
        {
            return "ID:" + ID + " City:" + City + " Country:" + Country + " Region:" + Region + " Sales:" + Sales;
        }
    }

    class Order
    {
        public string ID { get; set; }
        public decimal Amount { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            List<Customer> customers = new List<Customer>
            {
                new Customer {ID="A",City="New York",Country="USA",Region="North America",Sales=999 },
                new Customer {ID="B",City="Bei Jing",Country="China",Region="Asia",Sales=1999 },
                new Customer {ID="C",City="Shang Hai",Country="China",Region="Asia",Sales=9999 },
                new Customer {ID="D",City="Tokyo",Country="Japan",Region="Asia",Sales=2999 },
                new Customer {ID="E",City="London",Country="England",Region="Europe",Sales=3999 }
            };

            List<Order> orders = new List<Order>
            {
                new LinqDemo.Order {ID = "A",Amount = 100 },
                new LinqDemo.Order {ID = "A",Amount = 200 },
                new LinqDemo.Order {ID = "B",Amount = 300 },
                new LinqDemo.Order {ID = "B",Amount = 400 },
                new LinqDemo.Order {ID = "C",Amount = 500 },
                new LinqDemo.Order {ID = "D",Amount = 600 },
            };

            var queryResults = from c in customers
                               join o in orders on c.ID equals o.ID
                               select new { c.ID,c.City,SalesBefore = c.Sales,NewOrder = o.Amount,SalesAfter = c.Sales + o.Amount };

            foreach (var item in queryResults)
            {
                Console.WriteLine(item);
            }

            Console.ReadLine();
        }
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM