-
Linq Coding Part Four[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; }
}
}
LINQ Coding 目录![](https://www.cnblogs.com/Emoticons/baimantou/223332344.gif)
- Linq Coding -- Part One
- Linq Coding -- Part Two[标准查询运算符]
- Linq Coding -- Part Three [Let子句]
- Linq Coding -- Part Four[Concat应用]
- Linq Coding -- Part Five (Join之内部联接查询)
- Linq Coding -- Part Six (Join之分组联接)
- Linq Coding -- Part Seven (Join之左外部联接、DefaultIfEmpty、GroupJoin)
-
相关阅读:
Oracle获取每分钟、每10分钟、每小时、每天、每周、每月、每年的时间或日期
通过Oracle的GateWay,访问SQLServer的数据【方法二】
ororacle中每月调用一次,Oracle Job的使用(定时执行)Interval 参数
oracle的权限授予,oracle用户权限管理使用详解
Yarn学习(三)Yarn Workspace介绍 + 适用场景 + 命令
Yarn学习(一)介绍、安装
Yarn学习(二)常用命令
HanziWriter 小程序端开发注意事项
安装 esxi 提示 boot
spring Boot 相关问题以及修复(后续待补充)
-
原文地址:https://www.cnblogs.com/RuiLei/p/1084573.html
Copyright © 2020-2023
润新知