1.Enumerable.Concat<(Of <(TSource>)>) 泛型方法应用
此方法是延迟执行的。此方法只返回输入序列中的所有原始元素
应用场景:只有通过直接调用对象的 GetEnumerator 方法来枚举该对象时,才执行此方法表示的查询。
IEnumerable
<
String
>
queryWithEnumerable
=
students.Select(student
=>
student.City).Concat(teachers.Select(teacher
=>
teacher.City));
Console.WriteLine(
"
Enumerable.Concat<(Of <(TSource>)>) 泛型方法应用
"
);
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));
Console.WriteLine(
"
QueryableConcat<(Of <(TSource>)>) 泛型方法应用
"
);
foreach
(
string
city
in
queryWithEnumerable)
Console.WriteLine(city);
以下是一个完整的DEMO
public
class
ChangeDataUsingLinq : Interface
{
Interface Members#region Interface Members
public void invoke()
{
// Create the first data source.
List<Student> students = new List<Student>()
{
new Student
{First="Svetlana",
Last="Omelchenko",
ID=111,
Street="123 Main Street",
City="Seattle",
Scores= new List<int>
{97, 92, 81, 60}},
new Student
{First="Claire",
Last="O’Donnell",
ID=112,
Street="124 Main Street",
City="Redmond",
Scores= new List<int>
{75, 84, 91, 39}},
new Student
{First="Sven",
Last="Mortensen",
ID=113,
Street="125 Main Street",
City="Lake City",
Scores= new List<int>
{88, 94, 65, 91}},
};
// Create the second data source.
List<Teacher> teachers = new List<Teacher>()
{ 
new Teacher
{First="Ann", Last="Beebe", ID=945, City = "Seattle"},
new Teacher
{First="Alex", Last="Robinson", ID=956, City = "Redmond"},
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");
foreach (var person in peopleInSeattle)
{
Console.WriteLine(person);
}
//1.Enumerable.Concat<(Of <(TSource>)>) 泛型方法应用
IEnumerable<String> queryWithEnumerable = students.Select(student => student.City).Concat(teachers.Select(teacher => teacher.City));
Console.WriteLine("Enumerable.Concat<(Of <(TSource>)>) 泛型方法应用");
foreach (string city in queryWithEnumerable)
Console.WriteLine(city);
//2.QueryableConcat<(Of <(TSource>)>) 泛型方法应用
IEnumerable<String> queryWithQueryable = students.AsQueryable().Select(student => student.City).Concat(teachers.Select(teacher => teacher.City));
Console.WriteLine("QueryableConcat<(Of <(TSource>)>) 泛型方法应用");
foreach (string city in queryWithEnumerable)
Console.WriteLine(city);
}
#endregion
class Student
{
public string First
{ get; set; }
public string Last
{ get; set; }
public int ID
{ get; set; }
public string Street
{ get; set; }
public string City
{ get; set; }
public List<int> Scores;
}
class Teacher
{
public string First
{ get; set; }
public string Last
{ get; set; }
public int ID
{ get; set; }
public string City
{ get; set; }
}
}
LINQ Coding 目录![]()
LINQ Concat 使用详解
本文介绍了 LINQ 中 Concat 方法的两种应用方式:Enumerable.Concat 泛型方法和 Queryable.Concat 泛型方法,并提供了示例代码说明如何使用这两种方法将两个序列连接起来。
1411

被折叠的 条评论
为什么被折叠?



