· 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; }
--------------------------
|