本文参考:http://msdn.microsoft.com/zh-cn/library/bb387090.aspx
下面的代码对字符串数组执行 LINQ 查询。 在 C# 版本中,该查询使用 let 子句将每个字符串分隔成字段数组。 C#VB // Create the text file. string csvString = @"GREAL,Great Lakes Food Market,Howard Snyder,Marketing Manager,(503) 555-7555,2732 Baker Blvd.,Eugene,OR,97403,USA HUNGC,Hungry Coyote Import Store,Yoshi Latimer,Sales Representative,(503) 555-6874,City Center Plaza 516 Main St.,Elgin,OR,97827,USA LAZYK,Lazy K Kountry Store,John Steel,Marketing Manager,(509) 555-7969,12 Orchestra Terrace,Walla Walla,WA,99362,USA LETSS,Let's Stop N Shop,Jaime Yorres,Owner,(415) 555-5938,87 Polk St. Suite 5,San Francisco,CA,94117,USA"; File.WriteAllText("cust.csv", csvString); // Read into an array of strings. string[] source = File.ReadAllLines("cust.csv"); XElement cust = new XElement("Root", from str in source let fields = str.Split(',') select new XElement("Customer", new XAttribute("CustomerID", fields[0]), new XElement("CompanyName", fields[1]), new XElement("ContactName", fields[2]), new XElement("ContactTitle", fields[3]), new XElement("Phone", fields[4]), new XElement("FullAddress", new XElement("Address", fields[5]), new XElement("City", fields[6]), new XElement("Region", fields[7]), new XElement("PostalCode", fields[8]), new XElement("Country", fields[9]) ) ) ); Console.WriteLine(cust); 这段代码产生以下输出: XML <Root> <Customer CustomerID="GREAL"> <CompanyName>Great Lakes Food Market</CompanyName> <ContactName>Howard Snyder</ContactName> <ContactTitle>Marketing Manager</ContactTitle> <Phone>(503) 555-7555</Phone> <FullAddress> <Address>2732 Baker Blvd.</Address> <City>Eugene</City> <Region>OR</Region> <PostalCode>97403</PostalCode> <Country>USA</Country> </FullAddress> </Customer> <Customer CustomerID="HUNGC"> <CompanyName>Hungry Coyote Import Store</CompanyName> <ContactName>Yoshi Latimer</ContactName> <ContactTitle>Sales Representative</ContactTitle> <Phone>(503) 555-6874</Phone> <FullAddress> <Address>City Center Plaza 516 Main St.</Address> <City>Elgin</City> <Region>OR</Region> <PostalCode>97827</PostalCode> <Country>USA</Country> </FullAddress> </Customer> <Customer CustomerID="LAZYK"> <CompanyName>Lazy K Kountry Store</CompanyName> <ContactName>John Steel</ContactName> <ContactTitle>Marketing Manager</ContactTitle> <Phone>(509) 555-7969</Phone> <FullAddress> <Address>12 Orchestra Terrace</Address> <City>Walla Walla</City> <Region>WA</Region> <PostalCode>99362</PostalCode> <Country>USA</Country> </FullAddress> </Customer> <Customer CustomerID="LETSS"> <CompanyName>Let's Stop N Shop</CompanyName> <ContactName>Jaime Yorres</ContactName> <ContactTitle>Owner</ContactTitle> <Phone>(415) 555-5938</Phone> <FullAddress> <Address>87 Polk St. Suite 5</Address> <City>San Francisco</City> <Region>CA</Region> <PostalCode>94117</PostalCode> <Country>USA</Country> </FullAddress> </Customer> </Root>
二、LINQ 从XML文件中生成csv格式的文本文件
http://msdn.microsoft.com/zh-cn/library/bb387094.aspx
本示例的 C# 版本使用方法语法和 Aggregate 运算符通过一个表达式从 XML 文档生成 CSV 文件。 有关更多信息,请参见LINQ 中的查询语法和方法语法 (C#)。 Visual Basic 版本使用过程代码将字符串集合聚合为一个字符串。 本示例使用下面的 XML 文档:示例 XML 文件:Customers 和 Orders (LINQ to XML)。 C#VB XElement custOrd = XElement.Load("CustomersOrders.xml"); string csv = (from el in custOrd.Element("Customers").Elements("Customer") select String.Format("{0},{1},{2},{3},{4},{5},{6},{7},{8},{9}{10}", (string)el.Attribute("CustomerID"), (string)el.Element("CompanyName"), (string)el.Element("ContactName"), (string)el.Element("ContactTitle"), (string)el.Element("Phone"), (string)el.Element("FullAddress").Element("Address"), (string)el.Element("FullAddress").Element("City"), (string)el.Element("FullAddress").Element("Region"), (string)el.Element("FullAddress").Element("PostalCode"), (string)el.Element("FullAddress").Element("Country"), Environment.NewLine ) ) .Aggregate( new StringBuilder(), (sb, s) => sb.Append(s), sb => sb.ToString() ); Console.WriteLine(csv); 这段代码产生以下输出: GREAL,Great Lakes Food Market,Howard Snyder,Marketing Manager,(503) 555-7555,2732 Baker Blvd.,Eugene,OR,97403,USA HUNGC,Hungry Coyote Import Store,Yoshi Latimer,Sales Representative,(503) 555-6874,City Center Plaza 516 Main St.,Elgin,OR,97827,USA LAZYK,Lazy K Kountry Store,John Steel,Marketing Manager,(509) 555-7969,12 Orchestra Terrace,Walla Walla,WA,99362,USA LETSS,Let's Stop N Shop,Jaime Yorres,Owner,(415) 555-5938,87 Polk St. Suite 5,San Francisco,CA,94117,USA