分享

数据访问技术系列课程(10):.NET Framework 3.5中的LINQ简介

 牛人的尾巴 2016-04-12

· LINQ 概览

原始访问形式

 SqlConnection conn = new SqlConnection("server=(local);database=AdventureWorks;uid=sa;pwd=password01!");
        SqlCommand comm = new SqlCommand();
        comm.Connection = conn;
        comm.CommandType = CommandType.Text;
        comm.CommandText = "SELECT * FROM HumanResources.Department";

        DataSet ds = new DataSet();
        SqlDataAdapter da = new SqlDataAdapter(comm);
        da.Fill(ds);

        this.GridView1.DataSource = ds.Tables[0];
        this.GridView1.DataBind();

Linq:

        PubsDataContext dc = new PubsDataContext();
        var result = from item in dc.authors
                     select item;
        this.GridView1.DataSource = result;
        this.GridView1.DataBind();

 

 

 string[] cities = {"Shanghai","Beijing","Dalian",
                               "Chengdu"};

        IEnumerable<string> places = from city in cities
                                     where city.Length > 5
                                     orderby city descending
                                     select city;

        List<string > list = places .ToList<string>();
        DataSet ds = new DataSet();
        DataTable dt = new DataTable();
        dt.Columns.Add("City", typeof(string));

        for (int i = 0 ;i<list.Count ;i++)
        {
            DataRow dr = dt.NewRow();
            dr["City"] = list[i];
            dt.Rows.Add(dr);
        }
        ds.Tables.Add(dt);

        this.GridView1.DataSource = ds;      
        this.GridView1.DataBind();

 

 

· 访问数组

 

 string[] cities = {"Shanghai","Beijing","Dalian",
                               "Chengdu"};

 IEnumerable<string> places = from city in cities
                                     where city.Length > 5
                                     orderby city descending
                                     select city;


        this.GridView1.DataSource = places;      
        this.GridView1.DataBind();

 

· 访问集合

 

     List<string> list = new List<string>
        {
            "ShangHai", "Beijing","Dalian", "Chengdu","shenyang"
        };


        IEnumerable<string> places = from city in list
                                     where city.Length > 5
                                     orderby city descending
                                     select city;


        this.GridView1.DataSource = places;      
        this.GridView1.DataBind();

 

Demo2:Linq to 集合

 

public class Location
{

    public string Country { get; set; }
    public string City { get; set; }
    public double DistanceFromBeijing { get; set; }

   public Location()
   { 
   }
}

 

code

   List<Location> list = new List<Location>
        {
            new Location {City="Shenyang",Country="China",DistanceFromBeijing=800},
            new Location{City="Shanghai",Country="China",DistanceFromBeijing=1000},
            new Location{City="London",Country ="UK",DistanceFromBeijing=8000}
        };
        IEnumerable<Location> places = from item in list                                    
                                     select item;
        this.GridView1.DataSource = places;      
        this.GridView1.DataBind();

前台

   <asp:GridView ID="GridView1" runat="server" CellPadding="4" ForeColor="#333333"
            GridLines="None" AutoGenerateColumns="false">           
            <Columns>
                    <asp:BoundField HeaderText="City" DataField="City" />
                     <asp:BoundField HeaderText="Country" DataField="Country" />
                      <asp:BoundField HeaderText="Dist" DataField="DistanceFromBeijing" />
            </Columns>
        </asp:GridView>

 

 

· 查询投影

·查询投影(Select)

·不返回所有数据列/属性

·修改或者转化查询的数据

·利用编译器对"匿名类型"的支持查询数据列/属性

·生成匿名类型('a')

 

List<City> cities = City.GetLocations();

        var places = from city in cities
                     where city.DistanceFromBeijing > 3000
                     select new
                     {
                         Name = city.Name,
                         Country = city.Country,
                         DistanceFromBeijing = city.DistanceFromBeijing * 1.61
                     };

        GridView1.DataSource = places;
        GridView1.DataBind();

 

 

· 使用lambda表达式

·查询语法是一个方便的声明性代码缩写,您可以手动编写它:

·IEnumerable expr = names

                                 .Where(s=>s.Length==5)

                                 .OrderBy(s=>s)

                                 .Select(s=>s.ToUpper());

                                      

 

 

· 查询操作符

调用

·普通的方式来调用扩展方法

   ·IEnumerable<string> query = Enumerable.Where(names,s => s.Length < 6);

· C#语言允许我们使用如下的方式来调用扩展方法:

    ·IEnumerable<string> query = names.Where(s=> s.Length < 6);

 

 Demo:利用Lambda表达式

        List<Location> list = new List<Location>
        {
            new Location {Name="Shenyang",Country="China",DistanceFromBeijing=800},
            new Location{Name="Shanghai",Country="China",DistanceFromBeijing=1000},
            new Location{Name="London",Country ="UK",DistanceFromBeijing=8000}
        };

        var places = list.Where(city => city.DistanceFromBeijing < 1500)
            .Select(city => new { city.Name, city.Country, DistanceFromBeijing = city.DistanceFromBeijing });


        //IEnumerable<Location> places = from item in list                                    
        //                             select item;
        this.GridView1.DataSource = places;
        this.GridView1.DataBind();

 

------------------

 

Demo:

 

 List<City> list = new List<City>
        {
            new City {Name="Shenyang",Country="China",DistanceFromBeijing=800},
            new City{Name="Shanghai",Country="China",DistanceFromBeijing=1000},
            new City{Name="London",Country ="UK",DistanceFromBeijing=8000}
        };

        //IEnumerable<Location> places = from item in list                                    
        //                             select item;


        //1.
        //var places = list.Where(city => city.DistanceFromBeijing < 1500)
        //    .Select(city => new { city.Name, city.Country, DistanceFromBeijing = city.DistanceFromBeijing });
      
        //2.利用匿名方法       
        //var places = list.Where(delegate(City city) { return (city.DistanceFromBeijing < 1500); })
        //    .Select(city => new { city.Name, city.Country, DistanceFromBeijing = city.DistanceFromBeijing });

 

       //3.

        var places = list.Where(new Func<City, bool>(Predict))
            .Select(city => new { city.Name, city.Country, DistanceFromBeijing = city.DistanceFromBeijing });
               
        this.GridView1.DataSource = places;
        this.GridView1.DataBind();

 

   public bool Predict(City city)
    {
        return city.DistanceFromBeijing < 1500;
    }

 

--------------------------

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多