LINQ 查詢語句可以應(yīng)用在任何繼承于 IEnumerable 的有數(shù)據(jù)支撐的類,這里 T 可以是任何一個(gè)數(shù)據(jù)類型,例如 List< Book >。
讓我們來看一個(gè)示例理解一下概念。示例中使用了如下類:Book.cs
public class Books
{
public string ID {get; set;}
public string Title { get; set; }
public decimal Price { get; set; }
public DateTime DateOfRelease { get; set; }
public static List<Books> GetBooks()
{
List<Books> list = new List<Books>();
list.Add(new Books { ID = "001",
Title = "Programming in C#",
Price = 634.76m,
DateOfRelease = Convert.ToDateTime("2010-02-05") });
list.Add(new Books { ID = "002",
Title = "Learn Jave in 30 days",
Price = 250.76m,
DateOfRelease = Convert.ToDateTime("2011-08-15") });
list.Add(new Books { ID = "003",
Title = "Programming in ASP.Net 4.0",
Price = 700.00m,
DateOfRelease = Convert.ToDateTime("2011-02-05") });
list.Add(new Books { ID = "004",
Title = "VB.Net Made Easy",
Price = 500.99m,
DateOfRelease = Convert.ToDateTime("2011-12-31") });
list.Add(new Books { ID = "005",
Title = "Programming in C",
Price = 314.76m,
DateOfRelease = Convert.ToDateTime("2010-02-05") });
list.Add(new Books { ID = "006",
Title = "Programming in C++",
Price = 456.76m,
DateOfRelease = Convert.ToDateTime("2010-02-05") });
list.Add(new Books { ID = "007",
Title = "Datebase Developement",
Price = 1000.76m,
DateOfRelease = Convert.ToDateTime("2010-02-05") });
return list;
}
}
在 web 網(wǎng)頁中使用這個(gè)類要有簡單的標(biāo)簽控制,來顯示書的標(biāo)題。Page_Load 方法創(chuàng)建了一個(gè)書的列表并且通過使用 LINQ 查詢返回標(biāo)題:
public partial class simplequery : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
List<Books> books = Books.GetBooks();
var booktitles = from b in books select b.Title;
foreach (var title in booktitles)
lblbooks.Text += String.Format("{0} <br />", title);
}
}
public class Salesdetails
{
public int sales { get; set; }
public int pages { get; set; }
public string ID {get; set;}
public static IEnumerable<Salesdetails> getsalesdetails()
{
Salesdetails[] sd =
{
new Salesdetails { ID = "001", pages=678, sales = 110000},
new Salesdetails { ID = "002", pages=789, sales = 60000},
new Salesdetails { ID = "003", pages=456, sales = 40000},
new Salesdetails { ID = "004", pages=900, sales = 80000},
new Salesdetails { ID = "005", pages=456, sales = 90000},
new Salesdetails { ID = "006", pages=870, sales = 50000},
new Salesdetails { ID = "007", pages=675, sales = 40000},
};
return sd.OfType<Salesdetails>();
}
}
在 Page_Load 函數(shù)中添加代碼來用 join 子句處理在兩張表里完成查詢:
protected void Page_Load(object sender, EventArgs e)
{
IEnumerable<Books> books = Books.GetBooks();
IEnumerable<Salesdetails> sales = Salesdetails.getsalesdetails();
var booktitles = from b in books join s in sales on b.ID equals s.ID
select new { Name = b.Title, Pages = s.pages };
foreach (var title in booktitles)
lblbooks.Text += String.Format("{0} <br />", title);
}
結(jié)果頁顯示如下:
where 子句
where 子句允許在查詢中添加篩選條件。例如,如果你想獲得頁數(shù)多于 500 的書目,可以改變 Page_Load 方法中的句柄成下述樣子:
var booktitles = from b in books join s in sales on b.ID equals s.ID
where s.pages > 500 select new { Name = b.Title, Pages = s.pages };
var booktitles = from b in books join s in sales on b.ID equals s.ID
orderby b.Price select new { Name = b.Title, Pages = s.pages, Price = b.Price};
返回的元組是:
Let 子句
let 子句允許定義一個(gè)變量并且將數(shù)據(jù)計(jì)算的一個(gè)值賦給它。舉個(gè)例子,計(jì)從上述兩個(gè)銷售值中計(jì)算總銷售值,你需要這樣計(jì)算:
TotalSale = Price of the Book * Sales
為了完成這個(gè)算式,加入下面這個(gè)代碼片段在 Page_Load 方法的句柄里:
let 子句允許定義一個(gè)變量并且將數(shù)據(jù)計(jì)算的一個(gè)值賦給它。舉個(gè)例子,計(jì)從上述兩個(gè)銷售值中計(jì)算總銷售值,你需要這樣計(jì)算:
var booktitles = from b in book join s in sales on b.ID equals s.ID
let totalprofit = (b.Price * s.sales)
select new { Name = b.Title, TotalSale = totalprofit};
更多建議: