LINQ(三)使用 LINQ 进行数据转换
2014-10-18 18:05
281 查看
本文内容包括:将多个输入联接到一个输出序列;选择各个源元素的子集组成新对象;将内存中的对象转换为XML;对源元素执行操作即进行运算后返回新对象。
将多个输入联接到一个输出序列
可以使用LINQ查询来创建包含多个输入序列的元素的输出序列。下面的示例演示如何组合两个内存中的数据结构,但组合来自XML或SQL或数据集源的数据时可应用相同的原则。假定下面两种类类型:
C#
classStudent
{
publicstringFirst{get;set;}
publicstringLast{get;set;}
publicintID{get;set;}
publicstringStreet{get;set;}
publicstringCity{get;set;}
publicList<int>Scores;
}
classTeacher
{
publicstringFirst{get;set;}
publicstringLast{get;set;}
publicintID{get;set;}
publicstringCity{get;set;}
}
下面的示例演示该查询:
C#
classDataTransformations
{
staticvoidMain()
{
//Createthefirstdatasource.
List<Student>students=newList<Student>()
{
newStudent{First="Svetlana",
Last="Omelchenko",
ID=111,
Street="123MainStreet",
City="Seattle",
Scores=newList<int>{97,92,81,60}},
newStudent{First="Claire",
Last="O’Donnell",
ID=112,
Street="124MainStreet",
City="Redmond",
Scores=newList<int>{75,84,91,39}},
newStudent{First="Sven",
Last="Mortensen",
ID=113,
Street="125MainStreet",
City="LakeCity",
Scores=newList<int>{88,94,65,91}},
};
//Createtheseconddatasource.
List<Teacher>teachers=newList<Teacher>()
{
newTeacher{First="Ann",Last="Beebe",ID=945,City="Seattle"},
newTeacher{First="Alex",Last="Robinson",ID=956,City="Redmond"},
newTeacher{First="Michiyo",Last="Sato",ID=972,City="Tacoma"}
};
//Createthequery.
varpeopleInSeattle=(fromstudentinstudents
wherestudent.City=="Seattle"
selectstudent.Last)
.Concat(fromteacherinteachers
whereteacher.City=="Seattle"
selectteacher.Last);
Console.WriteLine("ThefollowingstudentsandteachersliveinSeattle:");
//Executethequery.
foreach(varpersoninpeopleInSeattle)
{
Console.WriteLine(person);
}
Console.WriteLine("Pressanykeytoexit.");
Console.ReadKey();
}
}
/*Output:
ThefollowingstudentsandteachersliveinSeattle:
Omelchenko
Beebe
*/
选择各个源元素的子集||合并
选择源序列中的各个元素的子集有两种主要方法:1.若要只选择源元素的一个成员,请使用点运算。在下面的示例中,假定Customer对象包含几个公共属性,其中包括名为City的字符串。在执行此查询时,此查询将生成字符串输出序列。
2.varquery=fromcustinCustomers
3.selectcust.City;
4.若要创建包含源元素的多个属性的元素,可以使用具有命名对象或匿名类型的对象初始值设定项。下面的示例演示如何使用匿名类型来封装各个Customer元素的两个属性:
5.varquery=fromcustinCustomer
selectnew{Name=cust.Name,City=cust.City};
将内存中的对象转换为XML
通过LINQ查询,可以轻松地在内存中的数据结构、SQL数据库、ADO.NET数据集和XML流或文档之间转换数据。下面的示例将内存中的数据结构中的对象转换为XML
元素。
C#
classXMLTransform
{
staticvoidMain()
{
//Createthedatasourcebyusingacollectioninitializer.
//TheStudentclasswasdefinedpreviouslyinthistopic.
List<Student>students=newList<Student>()
{
newStudent{First="Svetlana",Last="Omelchenko",ID=111,Scores=newList<int>{97,92,81,60}},
newStudent{First="Claire",Last="O’Donnell",ID=112,Scores=newList<int>{75,84,91,39}},
newStudent{First="Sven",Last="Mortensen",ID=113,Scores=newList<int>{88,94,65,91}},
};
//Createthequery.
varstudentsToXML=newXElement("Root",
fromstudentinstudents
letx=String.Format("{0},{1},{2},{3}",student.Scores[0],
student.Scores[1],student.Scores[2],student.Scores[3])
selectnewXElement("student",
newXElement("First",student.First),
newXElement("Last",student.Last),
newXElement("Scores",x)
)//end"student"
);//end"Root"
//Executethequery.
Console.WriteLine(studentsToXML);
//Keeptheconsoleopenindebugmode.
Console.WriteLine("Pressanykeytoexit.");
Console.ReadKey();
}
}
此代码生成下面的XML输出:
<Root>
<student>
<First>Svetlana</First>
<Last>Omelchenko</Last>
<Scores>97,92,81,60</Scores>
</student>
<student>
<First>Claire</First>
<Last>O'Donnell</Last>
<Scores>75,84,91,39</Scores>
</student>
<student>
<First>Sven</First>
<Last>Mortensen</Last>
<Scores>88,94,65,91</Scores>
</student>
</Root>
对源元素执行操作
输出序列可能不包含源序列的任何元素或元素属性。输出可能是通过将源元素用作输入参数计算出的值的序列。在执行下面这个简单查询时,此查询会输出一个字符串序列,该序列值表示根据double类型的元素的源序列进行的计算。说明 |
如果查询将转换为某个其他域,则不支持在查询表达式中调用方法。例如,不能在LINQtoSQL 中调用一般C#方法,因为SQLServer没有该方法的上下文。但是,可以将存储过程映射到方法,然后调用方法。有关更多信息,请参见 [LINQtoSQL]。 |
classFormatQuery
{
staticvoidMain()
{
//Datasource.
double[]radii={1,2,3};
//Query.
IEnumerable<string>query=
fromradinradii
selectString.Format("Area={0}",(rad*rad)*3.14);
//Queryexecution.
foreach(stringsinquery)
Console.WriteLine(s);
//Keeptheconsoleopenindebugmode.
Console.WriteLine("Pressanykeytoexit.");
Console.ReadKey();
}
}
/*Output:
Area=3.14
Area=12.56
Area=28.26
*/
相关文章推荐
- (007):使用LINQ进行数据转换(C#)
- Data Transformations with LINQ(第三章使用linq进行数据转换(加工))
- 光脚丫学LINQ(007):使用LINQ进行数据转换(C#)
- 光脚丫学LINQ(007):使用LINQ进行数据转换(C#)
- linq 扩展,在查询中使用字符串表达式对结果进行排序
- 在Linq to Sql中管理并发更新时的冲突(3):使用记录的时间戳进行检测
- 使用mysql odbc进行mysql和mssql的数据转换
- 在Linq to Sql中管理并发更新时的冲突(3):使用记录的时间戳进行检测
- 【Asp.Net从零开始】:使用LinqToData与QueryExtender对数据进行筛选性输出
- [代码]使用XmlReader对XML片段进行流式处理(LINQ to XML)
- SQL Server 2008使用LINQ进行数据访问(转载自IT168 [ http://www.it168.com/ ])
- Silverlight 2 (beta1)数据操作(6)——使用LINQ to SQL进行数据CRUD操作(下)
- 使用LINQ技术进行数据查询的顺序如下所示
- MOSS2010如何使用Linq进行分页
- 使用Gson进行json数据转换(list to json 和json to list)
- C# 中使用Linq 对Dictionary进行排序
- 在使用Linq的过程中,如果要进行数据的比较和处理,请记住使用ToList()方法。
- Silverlight 2 (beta1)数据操作(5)——使用LINQ to SQL进行数据CRUD操作(上)
- [导入]Silverlight 2 (beta1)数据操作(5)——使用LINQ to SQL进行数据CRUD操作(上)
- 在Linq to Sql中管理并发更新时的冲突(3):使用记录的时间戳进行检测 推荐