首页 > 代码库 > Linq查询操作语句学习
Linq查询操作语句学习
对于一个集合,我们通常会用foreach或者for循环来判断查找里面的元素。
但这种方法通常会看起来比较复杂,我们可以使用linq。
Linq允许编写C#代码以查询数据库相同的方式操作内存数据(写法类似于SQL)
核心目标是让程序员关心What,而不是How,所以效率通常不及不用Linq的实现。
但Linq的代码非常易理解,并且可以写的非常简洁。
一般的,可以使用Select、Where、OrderBy、GroupBy条件表达式
有这么一个字符串数组:
string[] myTest = new string[] { "Lily", "Micky", "jack", "Amy", "jake", "tera","Yvan"};
var myTest1 = myTest.Select((name) => name.ToUpper()); //全部变为大写字母
--这里面的name可任取名字,表示一个参数
var myTest2 = myTest.Select((name) => name.ToUpper()).Where((name)=>name.Length > 4);//在上面基础上找到名字长度大于4的
var myTest3 = myTest.Select((name) => name).Where((name) => name.Length < 5).GroupBy((name => name.Substring(0, 1)));
//名字长度小于5的按照首字母分组 也可以按照首字母排序:前面省略+ .OrderBy((name=>name.Substring(0,1)
同时除了以上写法还有另外一种
int[] myNumTest = new int[] { 22, 11, 33, 55, 2, 111, 4, 33, 222, 55, 86, 31 };//数据都是随便乱输入的
var max = (from myitem in myNumTest where myitem % 2 != 0 select myitem).Max();//选出能被2整除且取出最大值
好了,下面来处理XML文档(这都是参照视频的)
这个是选取的百度API中获取周边银行返回的XML数据
<?xml version="1.0" encoding="UTF-8"?><PlaceSearchResponse> <status>0</status> <message>ok</message> <results> <result name="a"> <name>交通银行ATM</name> <location> <lat>39.917437</lat> <lng>116.403147</lng> </location> <address>北京市东城区东长安街天安门内</address> <uid>7af671e39c0b6c1158f6be9f</uid> </result> <result> <name>中国银行ATM</name> <location> <lat>39.912947</lat> <lng>116.396089</lng> </location> <address>北京市西城区西长安街2号</address> <uid>82cf55ea33c0f0eefbdc856b</uid> </result> <result> <name>原麦加利银行</name> <location> <lat>39.908533</lat> <lng>116.406818</lng> </location> <address>东交民巷39</address> <uid>6cc9b6851fa53eb715c9057e</uid> </result> <result> <name>大陆银行旧址</name> <location> <lat>39.908388</lat> <lng>116.4017</lng> </location> <address>北京市西城区西交民巷17号</address> <uid>d472daffc63327a3d72ce2da</uid> </result> <result> <name>保商银行旧址</name> <location> <lat>39.908395</lat> <lng>116.401315</lng> </location> <address>北京市西城区西交民巷17</address> <uid>2fd2beabbcc4f12c7bdbd2af</uid> </result> <result> <name>中央银行旧址</name> <location> <lat>39.908347</lat> <lng>116.400848</lng> </location> <address>北京市西城区西交民巷17号</address> <uid>b958cfb975ce24e36240a948</uid> </result> <result> <name>中国银行ATM</name> <location> <lat>39.90836</lat> <lng>116.400191</lng> </location> <address>北京市西城区西交民巷甲19号</address> <uid>b4c84cd9c192007431169ba7</uid> </result> <result> <name>北京农商银行ATM(东长安支行)</name> <location> <lat>39.913888</lat> <lng>116.413451</lng> </location> <address>东长安街12</address> <uid>bf29b702a92f9f9909b93ac9</uid> </result> <result> <name>北京农商银行东长安支行</name> <location> <lat>39.913784</lat> <lng>116.41346</lng> </location> <address>东长安街12号</address> <telephone>(010)85229651</telephone> <uid>cc788fde071b2f8a88fc06c9</uid> </result> </results></PlaceSearchResponse>
我们要先对照着XML自定义一个类,将内容解析到实例化的类中去。(Lat.Lng我直接分开来了,而不再定义一个类了)
public class PlaceIPO { public string Name { set; get; } public string Lat { set; get; } public string Lng { set; get; } public string Address { set; get; } public string Uid { set; get; } }
PlaceIPO ipo = new PlaceIPO();//实例化 StorageFile xmlFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///XMLTest.xml")); //读取XML文件 string xmlString = await FileIO.ReadTextAsync(xmlFile);//XML文件变化字符串 XDocument xml = XDocument.Parse(xmlString);//将字符串转化为响应的XML文件 XElement root = xml.Element("PlaceSearchResponse");//获取根节点 var mySource = from item in root.Element("results").Elements("result") where item.HasAttributes && item.Attribute("name").Value =http://www.mamicode.com/= "a" select new PlaceIPO { Name = item.Element("name").Value, Address = item.Element("address").Value, Lat =item.Element("location").Element("lat").Value, Lng = item.Element("location").Element("lng").Value, Uid = item.Element("uid").Value }; Listbox1.ItemsSource = mySource;
注意这里,我只给第一个交通银行赋值name="a"之后只是查找这一个数据。
要进行其他操作大家可以自己试试。
在储存数据里面也讲到了对xml和Json的序列化/反序列化,直接使用自带方法就行。
下一篇再写写。
Linq查询操作语句学习