LINQ
-
Upload
chuck-durfee -
Category
Technology
-
view
65 -
download
0
Transcript of LINQ
![Page 1: LINQ](https://reader033.fdocuments.us/reader033/viewer/2022052700/55a8ec2d1a28abae2b8b4626/html5/thumbnails/1.jpg)
Chuck Durfee, 3 October 2012
![Page 2: LINQ](https://reader033.fdocuments.us/reader033/viewer/2022052700/55a8ec2d1a28abae2b8b4626/html5/thumbnails/2.jpg)
![Page 3: LINQ](https://reader033.fdocuments.us/reader033/viewer/2022052700/55a8ec2d1a28abae2b8b4626/html5/thumbnails/3.jpg)
![Page 4: LINQ](https://reader033.fdocuments.us/reader033/viewer/2022052700/55a8ec2d1a28abae2b8b4626/html5/thumbnails/4.jpg)
BIGDATA
![Page 5: LINQ](https://reader033.fdocuments.us/reader033/viewer/2022052700/55a8ec2d1a28abae2b8b4626/html5/thumbnails/5.jpg)
![Page 6: LINQ](https://reader033.fdocuments.us/reader033/viewer/2022052700/55a8ec2d1a28abae2b8b4626/html5/thumbnails/6.jpg)
![Page 7: LINQ](https://reader033.fdocuments.us/reader033/viewer/2022052700/55a8ec2d1a28abae2b8b4626/html5/thumbnails/7.jpg)
![Page 8: LINQ](https://reader033.fdocuments.us/reader033/viewer/2022052700/55a8ec2d1a28abae2b8b4626/html5/thumbnails/8.jpg)
Enumerable.Select(
Enumerable.OrderBy(
Enumerable.Where(names, s => s.Length == 5),
s => s
),
s => s.ToUpper()
);
versus
names.Where(s => s.Length == 5)
.OrderBy(s => s)
.Select(s => s.ToUpper())
![Page 9: LINQ](https://reader033.fdocuments.us/reader033/viewer/2022052700/55a8ec2d1a28abae2b8b4626/html5/thumbnails/9.jpg)
![Page 10: LINQ](https://reader033.fdocuments.us/reader033/viewer/2022052700/55a8ec2d1a28abae2b8b4626/html5/thumbnails/10.jpg)
, my dear Watson
![Page 11: LINQ](https://reader033.fdocuments.us/reader033/viewer/2022052700/55a8ec2d1a28abae2b8b4626/html5/thumbnails/11.jpg)
![Page 12: LINQ](https://reader033.fdocuments.us/reader033/viewer/2022052700/55a8ec2d1a28abae2b8b4626/html5/thumbnails/12.jpg)
1.0delegate bool FilterMethod(string s);
private bool IsFiveLetterName(string s) {
return s.Length == 5;
}
public DotNet10Land()
{
FilterMethod filter = IsFiveLetterName;
}
![Page 13: LINQ](https://reader033.fdocuments.us/reader033/viewer/2022052700/55a8ec2d1a28abae2b8b4626/html5/thumbnails/13.jpg)
delegate bool FilterMethod(string s);
public DotNet20Land(){FilterMethod filter =
delegate(string s) {return s.Length == 5;
};}
2.0
![Page 14: LINQ](https://reader033.fdocuments.us/reader033/viewer/2022052700/55a8ec2d1a28abae2b8b4626/html5/thumbnails/14.jpg)
C# 3 = .NET 3.5delegate bool FilterMethod(string s);
public DotNet35Land()
{
string chuck = "chuck";
FilterMethod filter =
delegate(string s) {
return s != chuck && s.Length == 5;
};
}
![Page 15: LINQ](https://reader033.fdocuments.us/reader033/viewer/2022052700/55a8ec2d1a28abae2b8b4626/html5/thumbnails/15.jpg)
![Page 16: LINQ](https://reader033.fdocuments.us/reader033/viewer/2022052700/55a8ec2d1a28abae2b8b4626/html5/thumbnails/16.jpg)
Func// delegate bool FilterMethod(string s);
public DotNet35Land()
{
Func<string, bool> filter =
delegate(string s) {
return s.Length == 5;
};
}
![Page 17: LINQ](https://reader033.fdocuments.us/reader033/viewer/2022052700/55a8ec2d1a28abae2b8b4626/html5/thumbnails/17.jpg)
Func<string, bool>
Func<string, int, DateTime>
Func<List<string>, int, bool>
but not
Func<string, System.Void>
![Page 18: LINQ](https://reader033.fdocuments.us/reader033/viewer/2022052700/55a8ec2d1a28abae2b8b4626/html5/thumbnails/18.jpg)
// delegate void ActionMethod(string s);
public DotNet35Land()
{
Action<string> action = delegate(string s) {
if (s.Length != 5)
throw new ArgumentException("Length != 5");
};
}
and… Action
![Page 19: LINQ](https://reader033.fdocuments.us/reader033/viewer/2022052700/55a8ec2d1a28abae2b8b4626/html5/thumbnails/19.jpg)
LAMBDA EXPRESSIONS
Func<string, bool> filter =
delegate(string s) {return s.Length == 5;};
var filter = (string s) => {return s.Length == 5;};
var filter = (string s) => s.Length == 5;
var filter = (s) => s.Length == 5;
var filter = s => s.Length == 5;
![Page 20: LINQ](https://reader033.fdocuments.us/reader033/viewer/2022052700/55a8ec2d1a28abae2b8b4626/html5/thumbnails/20.jpg)
by Alonzo Church, 1930’s
![Page 21: LINQ](https://reader033.fdocuments.us/reader033/viewer/2022052700/55a8ec2d1a28abae2b8b4626/html5/thumbnails/21.jpg)
![Page 22: LINQ](https://reader033.fdocuments.us/reader033/viewer/2022052700/55a8ec2d1a28abae2b8b4626/html5/thumbnails/22.jpg)
![Page 23: LINQ](https://reader033.fdocuments.us/reader033/viewer/2022052700/55a8ec2d1a28abae2b8b4626/html5/thumbnails/23.jpg)
![Page 24: LINQ](https://reader033.fdocuments.us/reader033/viewer/2022052700/55a8ec2d1a28abae2b8b4626/html5/thumbnails/24.jpg)
![Page 25: LINQ](https://reader033.fdocuments.us/reader033/viewer/2022052700/55a8ec2d1a28abae2b8b4626/html5/thumbnails/25.jpg)
![Page 26: LINQ](https://reader033.fdocuments.us/reader033/viewer/2022052700/55a8ec2d1a28abae2b8b4626/html5/thumbnails/26.jpg)
![Page 27: LINQ](https://reader033.fdocuments.us/reader033/viewer/2022052700/55a8ec2d1a28abae2b8b4626/html5/thumbnails/27.jpg)
![Page 28: LINQ](https://reader033.fdocuments.us/reader033/viewer/2022052700/55a8ec2d1a28abae2b8b4626/html5/thumbnails/28.jpg)
![Page 29: LINQ](https://reader033.fdocuments.us/reader033/viewer/2022052700/55a8ec2d1a28abae2b8b4626/html5/thumbnails/29.jpg)
![Page 30: LINQ](https://reader033.fdocuments.us/reader033/viewer/2022052700/55a8ec2d1a28abae2b8b4626/html5/thumbnails/30.jpg)
![Page 31: LINQ](https://reader033.fdocuments.us/reader033/viewer/2022052700/55a8ec2d1a28abae2b8b4626/html5/thumbnails/31.jpg)
![Page 32: LINQ](https://reader033.fdocuments.us/reader033/viewer/2022052700/55a8ec2d1a28abae2b8b4626/html5/thumbnails/32.jpg)
string[] names = { "Tom", "Dick",
"Harry" };
names.Select((s, i) =>
(i + 1) + "=" + s);
1=Tom
2=Dick
3=Harry
![Page 33: LINQ](https://reader033.fdocuments.us/reader033/viewer/2022052700/55a8ec2d1a28abae2b8b4626/html5/thumbnails/33.jpg)
![Page 34: LINQ](https://reader033.fdocuments.us/reader033/viewer/2022052700/55a8ec2d1a28abae2b8b4626/html5/thumbnails/34.jpg)
int[] numbers = { 3, 5, 7 };
string[] words = { "three", "five",
"seven", "ignored" };
IEnumerable<string> zip =
numbers.Zip(words,
(n, w) => n + "=" + w);
3=three
5=five
7=seven
![Page 35: LINQ](https://reader033.fdocuments.us/reader033/viewer/2022052700/55a8ec2d1a28abae2b8b4626/html5/thumbnails/35.jpg)
![Page 36: LINQ](https://reader033.fdocuments.us/reader033/viewer/2022052700/55a8ec2d1a28abae2b8b4626/html5/thumbnails/36.jpg)
IEnumerable<Order> spanishOrders = customers
.Where(c => c.Country == "Spain")
.SelectMany(c => c.Orders);
![Page 37: LINQ](https://reader033.fdocuments.us/reader033/viewer/2022052700/55a8ec2d1a28abae2b8b4626/html5/thumbnails/37.jpg)
![Page 38: LINQ](https://reader033.fdocuments.us/reader033/viewer/2022052700/55a8ec2d1a28abae2b8b4626/html5/thumbnails/38.jpg)
var slowQuery =
from c in customers
from p in purchases where c.ID == p.CustomerID
select c.Name + " bought a " + p.Description;
var fastQuery =
from c in customers
join p in purchases on c.ID equals p.CustomerID
select c.Name + " bought a " + p.Description;
![Page 39: LINQ](https://reader033.fdocuments.us/reader033/viewer/2022052700/55a8ec2d1a28abae2b8b4626/html5/thumbnails/39.jpg)
![Page 40: LINQ](https://reader033.fdocuments.us/reader033/viewer/2022052700/55a8ec2d1a28abae2b8b4626/html5/thumbnails/40.jpg)
var easyToRead =
from c in customers
join p in purchases on c.ID equals p.CustomerID
select c.Name + " bought a " + p.Description;
var harderToRead = customers.Join (
purchases,
c => (int?)(c.ID),
p => p.CustomerID,
(c, p) => ((c.Name + " bought a ") +
p.Description)
);
![Page 41: LINQ](https://reader033.fdocuments.us/reader033/viewer/2022052700/55a8ec2d1a28abae2b8b4626/html5/thumbnails/41.jpg)
![Page 42: LINQ](https://reader033.fdocuments.us/reader033/viewer/2022052700/55a8ec2d1a28abae2b8b4626/html5/thumbnails/42.jpg)
![Page 43: LINQ](https://reader033.fdocuments.us/reader033/viewer/2022052700/55a8ec2d1a28abae2b8b4626/html5/thumbnails/43.jpg)
public static class EnumerableExtensions
{
public static string ToCsv<T>(
this IEnumerable<T> sequence)
{
const string delimiter = ", ";
return sequence.Aggregate(
new StringBuilder(),
(sb, s) => sb.Append(s + delimiter),
sb => sb.ToString()
.TrimEnd(delimiter.ToArray()));
}
}
new[] { 1, 2, 3, 5, 8, 13, 20 } => 1, 2, 3, 5, 8, 13, 20
![Page 44: LINQ](https://reader033.fdocuments.us/reader033/viewer/2022052700/55a8ec2d1a28abae2b8b4626/html5/thumbnails/44.jpg)
![Page 45: LINQ](https://reader033.fdocuments.us/reader033/viewer/2022052700/55a8ec2d1a28abae2b8b4626/html5/thumbnails/45.jpg)