LinQ Coding (4)[Concat应用]
Concat有两种应用:
1.Enumerable.Concat<(Of <(TSource>)>) 泛型方法应用
此方法是延迟执行的。此方法只返回输入序列中的所有原始元素
应用场景:只有通过直接调用对象的 GetEnumerator 方法来枚举该对象时,才执行此方法表示的查询。
IEnumerable<String> queryWithEnumerable = students.Select(student => student.City).Concat(teachers.Select(teacher => teacher.City));
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Console.WriteLine("Enumerable.Concat<(Of <(TSource>)>) 泛型方法应用");
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
foreach (string city in queryWithEnumerable)
Console.WriteLine(city);
2.QueryableConcat<(Of <(TSource>)>) 泛型方法应用
此方法生成 MethodCallExpression,其实方法本身即作为了构造的泛型方法。
然后,将 MethodCallExpression 传递给 IQueryProvider 的 CreateQuery方法,由 source1 参数的 Provider 属性表示。其实说白了,就是将 source2 中的元素连接到 source1 中的元素以组合成一个新的序列。
IEnumerable<String> queryWithQueryable = students.AsQueryable().Select(student => student.City).Concat(teachers.Select(teacher => teacher.City));
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Console.WriteLine("QueryableConcat<(Of <(TSource>)>) 泛型方法应用");
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
foreach (string city in queryWithEnumerable)
Console.WriteLine(city);
以下是一个完整的DEMO
public class ChangeDataUsingLinq : Interface
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
Interface Members#region Interface Members
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public void invoke()
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
// Create the first data source.
List<Student> students = new List<Student>()
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
new Student
{First="Svetlana",
Last="Omelchenko",
ID=111,
Street="123 Main Street",
City="Seattle",
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
Scores= new List<int>
{97, 92, 81, 60}},
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
new Student
{First="Claire",
Last="O’Donnell",
ID=112,
Street="124 Main Street",
City="Redmond",
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
Scores= new List<int>
{75, 84, 91, 39}},
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
new Student
{First="Sven",
Last="Mortensen",
ID=113,
Street="125 Main Street",
City="Lake City",
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
Scores= new List<int>
{88, 94, 65, 91}},
};
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
// Create the second data source.
List<Teacher> teachers = new List<Teacher>()
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
new Teacher
{First="Ann", Last="Beebe", ID=945, City = "Seattle"},
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
new Teacher
{First="Alex", Last="Robinson", ID=956, City = "Redmond"},
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
new Teacher
{First="Michiyo", Last="Sato", ID=972, City = "Tacoma"}
};
//连接两个序列
var peopleInSeattle = (from student in students
where student.City == "Seattle"
select student.Last).Concat(from teacher in teachers
where teacher.City == "Seattle"
select teacher.Last);
Console.WriteLine("City == Seattle");
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
foreach (var person in peopleInSeattle)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
Console.WriteLine(person);
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
//1.Enumerable.Concat<(Of <(TSource>)>) 泛型方法应用
IEnumerable<String> queryWithEnumerable = students.Select(student => student.City).Concat(teachers.Select(teacher => teacher.City));
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Console.WriteLine("Enumerable.Concat<(Of <(TSource>)>) 泛型方法应用");
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
foreach (string city in queryWithEnumerable)
Console.WriteLine(city);
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
//2.QueryableConcat<(Of <(TSource>)>) 泛型方法应用
IEnumerable<String> queryWithQueryable = students.AsQueryable().Select(student => student.City).Concat(teachers.Select(teacher => teacher.City));
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Console.WriteLine("QueryableConcat<(Of <(TSource>)>) 泛型方法应用");
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
foreach (string city in queryWithEnumerable)
Console.WriteLine(city);
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
#endregion
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
class Student
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public string First
{ get; set; }
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public string Last
{ get; set; }
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public int ID
{ get; set; }
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public string Street
{ get; set; }
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public string City
{ get; set; }
public List<int> Scores;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
class Teacher
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public string First
{ get; set; }
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public string Last
{ get; set; }
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public int ID
{ get; set; }
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public string City
{ get; set; }
}
}
原文地址:https://www.cnblogs.com/qfb620/p/1116109.html