位置:首页 > 软件操作教程 > 编程开发 > C# > 问题详情

C# 单值选择查询

提问人:刘团圆发布时间:2020-12-11

    在SQL数据查询语言中,我们熟悉的另一类查询是SELECT DISTINCT查询,该査询可搜索数据中的唯一值,也就是说,值是不重复的。这是使用查询时的一个常见需求。

    假定需要在前面示例使用的顾客数据中査找不同的区域,由于在这些数据中没有单独的区域列表,所以需要从顾客列表中找出唯一的、不重复的区域列表。LINQ提供了 DistinctQ方法,以便找出这些数据,如下面的示例所示。


试一拭  投影——单值选择查询:BeginningCSharp7_22_8_SelectDistinctQuery\Program.cs

按照下面的步骤在Visual Studio2017中创建示例:

(1)在 C:\BeginningCSharp7\Chapter22目录中创建一个新的控制台应用程序 BeginningCSharp7_22_8. SelectDistinctQuery。

(2)输入如下代码,创建 Customer 类,初始化 customers 列表(List<Customer> customers):

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=9999},

              new Customer { lD="B", City="Mumbai", Country="India",

Region="Asia", Sales=8888},

              new Customer { ID="C", City="Karachi", Country="Pakistan",

Region="Asia", Sales=7777},

              new Customer { ID="D", City="Delhi", Country="India",

Region="Asia", Sales=6666},

              new Customer { ID="E", City="Sao Paulo", Country="Brazil",

Region="South America", Sales=5555 },

              new Customer { ID="F", City="Moscow", Country="Russia",

Region="Europe", Sales=4444 },

              new Customer { ID="G", City="Seoul", County="Korea",

Region="Asia", Sales=3333 },

              new Customer { ID="H", City="Istanbul", County="Turkey",

Region="Asiar", Sales=2222 },

              new Customer { ID="I", City="Shanghai", Country="China",

Region=,,Asia", Sales=llll },

              new Customer { ID="J", City="Lagos", Country="Nigeria",

Region="Africa", Sales=1000 },

              new Customer { ID="K", City="Mexico City", Country="Mexico",

Region="North America", Sales=2000 }

              new Customer { ID="L", City="Jakarta", Country="Indonesia",

Region="Asia", Sales=3000 },

              new Customer { ID="M", City="Tokyo", Country="Japan",

Region="Asia", Sales=4000 },

              new Customer { ID="N", City="Los Angeles", Country="USAt",

Region="North America", Sales=5000 }

              new Customer { ID="O", City="Cairo", Country="Egypt",

Region="Africa", Sales=6000 },

              new Customer { ID="P", City="Tehran", Country="Iran",

Region="Asia", Sales=7000 },

              new Customer { ID="Q", City="London", Country="UK",

Region="Europe", Sales=8000 },

              new Customer { ID="R", City="Beijing", Country="China",

Region="Asia", Sales=9000 },

              new Customer { ID="S",City="Bogota", Country="Colombia",

Region="South America", Sales=1001 },

              new Customer { ID="T", City="Lima", Country="Peru",

Region="South America", Sales=2002 }

        };

(3)在Main()方法的customers列表初始化之后,输入(或修改)查询,如下所示:

    var queryResults = customers.Select(c => c.Region).Distinct();

(4)完成MainO方法的其余代码,如下所示:

foreach (var item in queryResults)

          {

              WriteLine{item);

          }

          Write("Program finished, press Enter/Return to continue:");

          ReadLine();

(5)编译并执行程序,结果显示的是顾客所在的唯一区域,如下所示:

North America 

Asia

South America

Europe

Africa

Program finished, press Enter/Return to continue:


示例说明

    Customer类和customers列表的初始化与前面例子中的相同。在查询语句中,调用了Select()方法,用一个简单的Lambda表达式从Customer对象中选择区域,再调用Distinct(),从Select()中返回唯一的结果:

    var queryResults = customers.Select(c => c.Region).Distinct();

只能在方法语法中使用Distinct(),所以使用方法语法调用Select还可以调用Distinct()来修改在查询语法中创建的查询:

    var queryResults = (from c in customers select c.Region).Distinct();

查询语法由C#编译器转换为方法语法中的同系列LINQ方法调用,所以如果可以改进可读性和代码风格, 可以混合和匹配它们。

继续查找其他问题的答案?

相关视频回答
回复(0)
返回顶部