VS 2008 + .NET 3.5 - LINQ查询操作符之DisTinct、Union、Concat、Intersect、Except、Skip、Take、SkipWhile、TakeWhile、Single、SingLeorDefault、Reverse、SELEctMany
介绍
·DisTinct - 过滤集合中的相同项;延迟
·Union - 连接不同集合,自动过滤相同项;延迟
·Concat - 连接不同集合,不会自动过滤相同项;延迟
·Intersect - 获取不同集合的相同项(交集);延迟
·Except - 从某集合中删除其与另一个集合中相同的项;延迟
·Skip - 跳过集合的前n个元素;延迟
·Take - 获取集合的前n个元素;延迟
·SkipWhile - 直到某一条件成立就停止跳过;延迟
·TakeWhile - 直到某一条件成立就停止获取;延迟
·Single - 根据表达式返回集合中的某一元素;不延迟
·SingLeorDefault - 根据表达式返回集合中的某一元素(如果没有则返回默认值);不延迟
·Reverse - 对集合反向排序;延迟
·SELEctMany - SELEct选择(一对多);延迟
示例
SumMary2.aspx.cs
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml.Linq;
using System.Collections.Generic;
using DAL;
public partial class LINQ_SumMary2 : System.Web.UI.Page
{
northwindDataContext _ctx = new NorthwindDataContext();
String[] _ary = null;
protected void Page_Load(object sender,EventArgs E)
{
_ary = new String[] { "asp.net","csharp","xhtml","css","javascript","wcf","wpf",
"asp.net",
"silverlight","linq","wf","sqlserver","asp.net ajax","ssis","ssas","ssrs" };
// DisTinct - 过滤集合中的相同项;延迟
SumMary_DisTinct();
// Union - 连接不同集合,自动过滤相同项;延迟
SumMary_Union();
// Concat - 连接不同集合,不会自动过滤相同项;延迟
SumMary_Concat();
// Intersect - 获取不同集合的相同项(交集);延迟
SumMary_Intersect();
// Except - 从某集合中删除其与另一个集合中相同的项;延迟
SumMary_Except();
// Skip - 跳过集合的前n个元素;延迟
// Take - 获取集合的前n个元素;延迟
SumMary_Skip_Take();
// SkipWhile - 直到某一条件成立就停止跳过;延迟
// TakeWhile - 直到某一条件成立就停止获取;延迟
SumMary_SkipWhile_TakeWhile();
// Single - 根据表达式返回集合中的某一元素;不延迟
// SingLeorDefault - 根据表达式返回集合中的某一元素(如果没有则返回默认值);不延迟
SumMary_Single_SingLeorDefault();
// Reverse - 对集合反向排序;延迟
SumMary_Reverse();
// SELEctMany - SELEct选择(一对多);延迟
SumMary_SELEctMany();
}
}
DisTinct - 过滤集合中的相同项;延迟
//// <sumMary>
/// DisTinct - 过滤集合中的相同项;延迟
/// </sumMary>
void SumMary_DisTinct()
{
var ary = (from a in _ary
SELEct a).DisTinct();
foreach (String s in ary)
{
result.InnerHtml += s + "<br />";
}
result.InnerHtml += "<br />";
}
运行结果
asp.net
csharp
xhtml
css
javascript
wcf
wpf
silverlight
linq
wf
sqlserver
asp.net ajax
ssis
ssas
ssrs
Union - 连接不同集合,自动过滤相同项;延迟
//// <sumMary>
/// Union - 连接不同集合,自动过滤相同项;延迟
/// </sumMary>
void SumMary_Union()
{
var ary = (from a in _ary
SELEct a).Take(3).Union((from a in _ary
SELEct a).Take(6));
foreach (String s in ary)
{
result.InnerHtml += s + "<br />";
}
result.InnerHtml += "<br />";
}
运行结果
asp.net
csharp
xhtml
css
javascript
wcf
Concat - 连接不同集合,不会自动过滤相同项;延迟
//// <sumMary>
/// Concat - 连接不同集合,不会自动过滤相同项;延迟
/// </sumMary>
void SumMary_Concat()
{
var ary = (from a in _ary
SELEct a).Take(3).Concat((from a in _ary
SELEct a).Take(6));
foreach (String s in ary)
{
result.InnerHtml += s + "<br />";
}
result.InnerHtml += "<br />";
}
运行结果
asp.net
csharp
xhtml
asp.net
csharp
xhtml
css
javascript
wcf
Intersect - 获取不同集合的相同项(交集);延迟
//// <sumMary>
/// Intersect - 获取不同集合的相同项(交集);延迟
/// </sumMary>
void SumMary_Intersect()
{
var ary = (from a in _ary
SELEct a).Take(3).Intersect((from a in _ary
SELEct a).Skip(1).Take(3));
foreach (String s in ary)
{
result.InnerHtml += s + "<br />";
}
result.InnerHtml += "<br />";
}
运行结果
csharp
xhtml
Except - 从某集合中删除其与另一个集合中相同的项;延迟
//// <sumMary>
/// Except - 从某集合中删除其与另一个集合中相同的项;延迟
/// </sumMary>
void SumMary_Except()
{
var ary = (from a in _ary
SELEct a).Take(3).Except((from a in _ary
SELEct a).Skip(1).Take(3));
foreach (String s in ary)
{
result.InnerHtml += s + "<br />";
}
result.InnerHtml += "<br />";
}
运行结果
asp.net
Skip - 跳过集合的前n个元素;延迟
Take - 获取集合的前n个元素;延迟
//// <sumMary>
/// Skip - 跳过集合的前n个元素;延迟
/// Take - 获取集合的前n个元素;延迟
/// </sumMary>
void SumMary_Skip_Take()
{
var ary = (from a in _ary
SELEct a).Skip(2).Take(3);
foreach (String s in ary)
{
result.InnerHtml += s + "<br />";
}
result.InnerHtml += "<br />";
}
运行结果
xhtml
css
javascript
SkipWhile - 直到某一条件成立就停止跳过;延迟
TakeWhile - 直到某一条件成立就停止获取;延迟
//// <sumMary>
/// SkipWhile - 直到某一条件成立就停止跳过;延迟
/// TakeWhile - 直到某一条件成立就停止获取;延迟
/// </sumMary>
void SumMary_SkipWhile_TakeWhile()
{
var ary = (from a in _ary
SELEct a).SkipWhile(s => s.Length < 8).TakeWhile(s => s.Length > 2);
foreach (String s in ary)
{
result.InnerHtml += s + "<br />";
}
result.InnerHtml += "<br />";
}
运行结果
javascript
wcf
wpf
asp.net
csharp
xhtml
css
javascript
silverlight
linq
Single - 根据表达式返回集合中的某一元素;不延迟
SingLeorDefault - 根据表达式返回集合中的某一元素(如果没有则返回默认值);不延迟
//// <sumMary>
/// Single - 根据表达式返回集合中的某一元素;不延迟
/// SingLeorDefault - 根据表达式返回集合中的某一元素(如果没有则返回默认值);不延迟
/// </sumMary>
void SumMary_Single_SingLeorDefault()
{
String s = (from a in _ary
SELEct a).Single(a => a == "silverlight");
// String s = (from a in _ary
// SELEct a).SingLeorDefault(a => a == "xxx");
// s == null
result.InnerHtml += s + "<br />";
result.InnerHtml += "<br />";
}
运行结果
silverlight
Reverse - 对集合反向排序;延迟
//// <sumMary>
/// Reverse - 对集合反向排序;延迟
/// </sumMary>
void SumMary_Reverse()
{
var ary = (from a in _ary
orderby a.Length ascending
SELEct a).Reverse();
foreach (String s in ary)
{
result.InnerHtml += s + "<br />";
}
result.InnerHtml += "<br />";
}
运行结果
asp.net ajax
silverlight
javascript
javascript
sqlserver
asp.net
asp.net
csharp
csharp
xhtml
xhtml
ssrs
ssas
ssis
linq
css
wpf
wcf
css
wf
//// <sumMary>
/// SELEctMany - SELEct选择(一对多);延迟
/// </sumMary>
void SumMary_SELEctMany()
{
var ary = (from a in _ary
where a.Contains(".")
SELEct a).SELEctMany(a => a.Split('.'));
foreach (String s in ary)
{
result.InnerHtml += s + "<br />";
}
result.InnerHtml += "<br />";
}
运行结果aspnetaspnetaspnet ajax