个人Linq函数方法总结

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录
AsEnumerable (1)
Single (2)
Select (2)
Take (2)
Skip (2)
TakeWhile (2)
SkipWhile (2)
ThenBy (2)
Distinct (2)
Union (2)
Intersect (2)
Except (2)
OfType (2)
ToDictionary (2)
First (2)
ElementAt (2)
DefaultIfEmpty (2)
Repeat (2)
Range (2)
Any (2)
All (2)
Contains (2)
Count (2)
Min (2)
Average (2)
Aggregate (2)
Concat (2)
CopyToDataTable (2)
DefaultIfEmpty (2)
DataTable的检索 (2)
Join (2)
1、Var digits=ds.Tabalse[“Digits”].AsEnumerable();
2、Var sDigits=digits.where((digit,index)=>digit.Field<string>(0).Length< index );
3、var singleRowTable = new DataTable("SingleRowTable");
singleRowTable.Columns.Add("id", typeof(int));
singleRowTable.Rows.Add(new object[] {1});
var singleRow = singleRowTable.AsEnumerable().Single();
Console.WriteLine(singleRow != null);
输出 True
var table = new DataTable("MyTable");
table.Columns.Add("id", typeof(int));
table.Rows.Add(new object[] {1});
table.Rows.Add(new object[] {2});
var singleRow = table.AsEnumerable().Single(r => r.Field<int>("id") == 1);
Console.WriteLine(singleRow != null);
输出True
4、var numbers = testDS.Tables["Numbers"].AsEnumerable();
var numsInPlace = numbers.Select(
(num, index) =>
new {Num = num.Field<int>("number"), InPlace = (num.Field<int>("number") == index)} );
foreach (var n in numsInPlace)
{
Console.WriteLine("{0}: {1}", n.Num, n.InPlace);
}
输出
5: False
4: False
1: False
3: True
9: False
5、var first3Numbers = numbers.Take(3); 取前三个
6、var allButFirst4Numbers = numbers.Skip(4); 跳过前四个
7、int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
var firstNumbersLessThan6 = numbers.TakeWhile(n => n.Field<int>("number") < 6);
当条件满足时停止
输出:5 4 1 3
8、int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
var allButFirst3Numbers = numbers.SkipWhile(n => n.Field<int>("number") % 3 != 0); Console.WriteLine("All elements starting from first element divisible by 3:");
foreach (var n in allButFirst3Numbers) {
Console.WriteLine(n.Field<int>("number"));
}
输出:
39 8 6……
9、string[] words = { "aPPLE", "BlUeBeRrY", "cHeRry" };
var sortedWords =
from w in words
orderby w.Field<string>("word")
select w;
foreach (var w in sortedWords) {
Console.WriteLine(w.Field<string>("word"));
}
10、Products表
var sortedProducts =
from p in products
orderby p.Field<string>("ProductName")
select p.Field<string>("ProductName");
11、Thenby
string[] words3 = { "aPPLE", "AbAcUs", "bRaNcH", "BlUeBeRrY", "ClOvEr", "cHeRry"};
var sortedWords =
words3.OrderBy(a =>a.Field<string>("word").Length).ThenBy
(a => a.Field<string>("word"), new CaseInsensitiveComparer());
输出:aPPLE AbAcUs bRaNcH cHeRry ClOvEr BlUeBeRrY
12、Reverse 反转
string[] digits = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };
var reversedIDigits = (
from d in digits
where d.Field<string>("digit")[1] == 'i'
select d ).Reverse();
foreach (var d in reversedIDigits) {
Console.WriteLine(d.Field<string>("digit"));
}
输出:nine eight six five
13、string[] words4 = { "blueberry", "chimpanzee", "abacus", "banana", "apple", "cheese" };
var wordGroups =
from w in words4
group w by w.Field<string>("word")[0] into g
select new {FirstLetter = g.Key, Words = g};
foreach (var g in wordGroups) {
Console.WriteLine("Words that start with the letter '{0}':", g.FirstLetter);
foreach (var w in g.Words) {
Console.WriteLine(w.Field<string>("word"));
}
}
输出
Words that start with the letter 'b':
blueberry
banana
Words that start with the letter 'c':
chimpanzee
cheese
Words that start with the letter 'a':
abacus
apple
14、Distinct
int[] factorsOf300 = { 2, 2, 3, 5, 5 };
var uniqueFactors = factorsOf300.Distinct(DataRowComparer.Default);
foreach (var f in uniqueFactors) {
Console.WriteLine(f.Field<int>("factor"));
}
输出:2 3 5
15、Union 合并(不重复即去重)
int[] numbersA = { 0, 2, 4, 5, 6, 8, 9 };
int[] numbersB = { 1, 3, 5, 7, 8 };
var uniqueNumbers = numbersA.Union(numbersB.AsEnumerable(), DataRowComparer.Default);
foreach (var n in uniqueNumbers) {
Console.WriteLine(n.Field<int>("number"));
}
输出:0 2 4 5 6 8 9 1 3 7
16、intersect 交集
int[] numbersA = { 0, 2, 4, 5, 6, 8, 9 };
int[] numbersB = { 1, 3, 5, 7, 8 };
var commonNumbers = numbersA.Intersect(numbersB, DataRowComparer.Default);
foreach (var n in commonNumbers)
{ Console.WriteLine(n.Field<int>(0)); }
输出:5 8
17、 Except A中去B
int[] numbersA = { 0, 2, 4, 5, 6, 8, 9 };
int[] numbersB = { 1, 3, 5, 7, 8 };
var aOnlyNumbers = numbersA.Except(numbersB, DataRowComparer.Default);
foreach (var n in aOnlyNumbers) {
Console.WriteLine(n["number"]);
}
输出: 0 2 4 6 9
ToArray ToList ToDictionary
18、 OfType格式输出
var rows = numbers.Rows.OfType<DataRow>();
foreach (DataRow d in rows) {
Console.WriteLine(d.Field<int>("number"));
}
19、ToDictionary
var scoreRecordsDict=scoreRecords.ToDictionary(sr=>sr.Field<string>("Name"));
Console.WriteLine("Bob's score: {0}", scoreRecordsDict["Bob"]["Score"]);
输出:Bob's score: 40
20、First 查询第一个匹配条件的元素
DataRow product=(
From p in products
Where (int)p[“ProductId”]==12
Select p
).First();
Console.WriteLine("ProductId: " + product.Field<int>("ProductId"));
Console.WriteLine("ProductName: " + product.Field<string>("ProductName"));
输出:
ProductId: 12
ProductName: Queso Manchego La Pastora
Customer cust=db.Customers.First(c=>c.CustomerID=="BONAP");
21、ElmentAt 检索第几个元素
int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
var fourthLowNum = (
from n in numbers
where n.Field<int>("number") > 5
select n.Field<int>("number")
).ElementAt(3);
Console.WriteLine("{0}", fourthLowNum);
输出:7
22、DefaultIfEmpty
Var emptyTable=new DataTable(“EmptyTable”).AsEnumberale();
DataTable numbers= testDS.Tables[“Numbers”];
DataRow defaultRow=numbers.NewRow();
defaultRow[“number”]=888;
var defaultRSequence = emptyTable.DefaultIfEmpty(defaultRow);
foreach(DataRow row in defaultRSequence)
{ console.WriteLine(row.Field<int>(“number”)); }
输出:888
23、Repeat重复多少次
var numbers = Enumerable.Repeat(“good”, 3);
foreach (var n in numbers) {
Console.WriteLine(n);
}
输出: good good good
24、Rang(基数,个数)
var numbers =
from n in Enumerable.Range(100, 5)
select new {Number = n}
foreach (var n in numbers) {
Console.WriteLine("{0}", n.Number);
}
输出:100101102103104
25、Any 所有元素中有一个满足条件
string[] words2 = { "believe", "relief", "rec ei pt", "field" }; bool iAfterE = words2.Any(w => w.Field<string>("word").Contains("ei"));
Console.WriteLine("{0}", iAfterE);
输出:True
26、All 所有元素都满足条件
int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
bool onlyOdd = numbers.All(n => n.Field<int>("number") % 2 == 1);
Console.WriteLine("{0}", onlyOdd);
输出:False
27、Contains
int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
DataRow rowToFind = null;
foreach(DataRow r in numbers.Rows)
{
if (r.Field<int>("number") == 3)
{
rowToFind = r;
break;
}
}
var foundRow = numbers.AsEnumerable().Contains(rowToFind);
Console.WriteLine("{0}", foundRow);
输出:True
28、Count
int[] numbers = { 5, 4, 1,3, 9, 8, 6, 7, 2, 0 };
int oddNumbers = numbers.Count(n => n.Field<int>("number") % 2 == 1);
Console.WriteLine("奇数有: {0} ", oddNumbers);
输出:奇数有:5
29、Min 本例显示包含最少字母个数的word包含几个字母
string[] words = { "aPPLE", "BlUeBeRrY", "cHeRry" };
int shortestWord = words.Min(w => w.Field<string>("word").Length);
Console.WriteLine("{0}", shortestWord);
输出:5
30、Average 本例展示求各元素的长度平均值
string[] words = { "aPPLE", "BlUeBeRrY", "cHeRry" };
double averageLength = words.Average(w => w.Field<string>("word").Length);
Console.WriteLine("{0}", averageLength);
输出6.66666666666667
31、Aggregate 累加器函数
int[] temp = { 20, 10, 40, 50 };
double startBalance = 100.0;
var endBalance =
temp.Aggregate(s tartBalance,
(balance, next) =>
next.Field<int>("withdrawal") <= balance ? balance - next.Field<int>("withdrawal"): balance );
Console.WriteLine("Ending balance: {0}", endBalance);
输出: 20
注释:s tartBalance 为累加器初始值。

(balance, next) 为对每个元素调用的累加器函数
执行过程:第一次初始100 跟 20比较 20<=100 成立累加器初始变为100-20=80
第二次 80 根 10 比较 10<=80 成立累加器初始变为80-10 =70
第三次 70 跟 40 比较 (30)
30 50 50<=30 不成立 30
32、Concat 只联接
int[] numbersA = { 0, 2, 4, 5, 6, 8, 9 };
int[] numbersB = { 1, 3, 5, 7, 8 };
var allNumbers = numbersA.Concat(numbersB);
foreach (var n in allNumbers) {
Console.WriteLine(n.Field<int>("number"));
}
输出:0 2 4 5 6 8 9 1 3 5 7 8
33、SequenceEqual 序列比较
string[] words = { "aPPLE", "BlUeBeRrY", "cHeRry" };
string[] words2 = { "believe", "relief", "receipt", "field" };
var words = testDS.Tables["Words"].AsEnumerable();
var words2 = testDS.Tables["Words2"].AsEnumerable();
bool match = words.SequenceEqual(words2);
Console.WriteLine("{0}", match);
输出:False
34、CopyToDataTable 将检索的var对象复制到DataTable
var query = from o in orders
where o.Field<decimal>("Total") < 500.00M
select o;
DataTable results = query.CopyToDataTable();
35、对DataTable的检索操作
DataTable employees
var q=employees.Where(e=> e.Salary>=85000).OrderBy(e=> );
foreach(var emp in q) {
Console.WriteLine("Id = {0}, Name = {1}", emp.ID, );
}
Var q = employees.Select(emp=> new {EmployeeID=emp.ID,EmployeeName=}).OrderBy(e=>e.EmployeeNmae);
Foreach( var o in q)
{ Console.WriteLine(“{0},{1}”,o.EmployeeID,o.EmployeeName);}
36、Join
var smallo=表A.Join(表B, o=>o.Field<string>("关键字"), c=>c.Field<string>("关键字"), (c, o) =>new
{
CustomerID= c.Field<string>("CustomerID"),
OrderID=o.Field<int>("OrderID"),
Total=o.Field<decimal>("Total")
});
var q=from c in customers
join o in orders on c.Field<string>("关键字") equals o.Field<string>("关键字") into ords select new {CustomerID= c.Field<string>("关键字"), ords=ords.Count()};
foreach(var r in q) {
Console.WriteLine("CustomerID: {0} Orders Count: {1}", r.CustomerID, r.ords);
}。

相关文档
最新文档