函数:
selectMany
where
orderBy
thenBy
distinct
groupBy
groupJoin
join
except
union
intersect
take/takeWhile/takeUntil
skip/skipWhile/skipUntil
例:
var evens = list.where(function (x) { return x % 2 == 0; }).toArray();
var odds = list.where("x => x % 2 == 1").toArray();
Ordering a list of people:
var people = [{first: "Jason", last: "Bourne"},
{first: "Gandalf", last: "The Grey"},
{first: "John", last: "Smith"},
{first: "Albert", last: "Smith"}];
var results = $linq(people)
.orderBy(function (x) { return x.last; })
.thenBy("x => x.first")
.toArray();
Using an inner join:
var users = [{username: "asmith", domain: "north_america"},
{username: "tmcfarland", domain: "europe"},
{username: "cdeckard", domain: "nort_america"}];
var groups = [{user: "ASMITH", groupName: "base_users"},
{user: "TMCFARLAND", groupName: "admins"},
{user: "CDECKARD", groupName: "base_users"},
{user: "CDECKARD", groupName: "testers"}];
var results = $linq(users).join(groups,
function (x) { return x.username; }, // key for 'users'
"x => x.user", // key for 'groups'
function (outer, inner) // function to generate results
{
return "user: " + outer.username +
", domain: " + outer.domain +
", group: " + inner.groupName;
},
"(x, y) => x.toLowerCase() == y.toLowerCase()"); // compare keys case-insensitively
LINQ to Object | |||||
MethodInfo[] methods = typeof(string).GetMethods(); | |||||
var q = from t | |||||
in methods | |||||
where (t.Name.Length > 15) | |||||
select t; |
LINQ to Xml |
XElement xelem = XElement.Load(@"example.xml"); // 查询节点名为Item,并返回它们的PartNumber属性值的集合 | |||||||||||
IEnumerable<string> partNos = from item in xelem.Descendants("Item") | |||||||||||
Select (string)item.Attribute("PartNumber"); | |||||||||||
foreach (string str in partNos) | |||||||||||
Console.WriteLine(str); |
XElement contacts = new XElement("Contacts", | ||||||||
new XElement("Name", "Ice Lee"), | ||||||||
new XElement("Phone", "010-876546", | ||||||||
new XAttribute("Type", "Home")), | ||||||||
new XElement("Phone", "425-23456", | ||||||||
new XAttribute("Type", "Work")), | ||||||||
new XElement("Address", | ||||||||
new XElement("Street", "ZhiXinCun"), | ||||||||
new XElement("City", "Beijin") ) ); | ||||||||
输出结果: | ||||||||
<? Xml version="1.0" encoding="utf-8"?> | ||||||||
<Contacts> | ||||||||
<Name>Ice Lee</Name> | ||||||||
<Phone Type="Home">010-876546</Phone> | ||||||||
<Phone Type="Work">425-23456</Phone> | ||||||||
<Address> <Street>ZhiXinCun</Street> <City>Beijing</City> </Address> | ||||||||
</Contacts> |
XMLファイルのフィールド取得---元素轴方法 | ||||||
XElement root = XElement.Load("categorizedBooks.xml"); | ||||||
XElement dotNetCategory = root.Element("category"); | ||||||
Console.WriteLine(dotNetCategory); | ||||||
XElement root = XElement.Load("categorizedBooks.xml"); | ||||||
XElement dotNetCategory = root.Element("category"); | ||||||
XAttribute name = dotNetCategory.Attribute("name"); | ||||||
Console.WriteLine((string) name); | ||||||
XElement books = dotNetCategory.Element("books"); | ||||||
IEnumerable<XElement> bookElements = books.Elements("book"); | ||||||
Console.WriteLine((string) dotNetcategory); | ||||||
foreach(XElement bookElement in bookElements) | ||||||
{ Console.WriteLine(" - " + (string)bookElement); } |
XML文件
<category name="Technical"> | |||||
<category name=".NET"> | |||||
<books> | |||||
<book> | |||||
CLR via C#</book> | |||||
<book> | |||||
Essential .NET</book> | |||||
</books> | |||||
</category> | |||||
<category name="Design"> | |||||
<books> | |||||
<book> | |||||
Refactoring</book> | |||||
<book> | |||||
Domain Driven Design</book> | |||||
<book> | |||||
Patterns of Enterprise Application Architecture</book> | |||||
</books> | |||||
</category> | |||||
<books> | |||||
<book> | |||||
Extreme Programming Explained</book> | |||||
<book> | |||||
Pragmatic Unit Testing with C#</book> | |||||
<book> | |||||
Head First Design Patterns</book> | |||||
</books> | |||||
</category> |
XElement xelem = XElement.Load(@"example.xml"); | ||||||
var partNos = from item in xelem.Descendants("Item") | ||||||
where item.Attribute("PartNumber").Value == "872-AA" | ||||||
select item; | ||||||
foreach (XElement node in partNos) | ||||||
{ | ||||||
node.Value = "Hello"; | ||||||
Console.WriteLine(node.Value); | ||||||
} | ||||||
A. 查找目标树节点的父节点 | ||||||
B. 将先前的节点的孩子转移到新节点 | ||||||
C. 将父节点的子节点替换(如果需要还要用算法重新排序树)。 | ||||||
XElement xel = XElement.Load(@"example.xml"); | ||||||
var itemNos = from item in xel.Descendants("Item") | ||||||
select item; | ||||||
int n = itemNos.Count(); | ||||||
for (int i=0; i<n; i++) { | ||||||
// 新创建节点 | ||||||
XElement nEl = new XElement("Element"); | ||||||
// 转移孩子节点 | ||||||
nEl.Add(itemNos.ElementAt(0).Elements()); | ||||||
// 替换 | ||||||
itemNos.ElementAt(0).ReplaceWith(nEl); | ||||||
} | ||||||
Console.Write(xel); | ||||||
削除 | ||||||
XElement xelem = XElement.Load(@"example.xml"); | ||||||
var partNos = from item in xelem.Descendants("Item") | ||||||
where item.Attributes("PartNumber").Single().Value == "872-AA" | ||||||
select item; | ||||||
partNos.Remove(); | ||||||
Console.Write(xelem); |