首页 > 代码库 > 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>
View Code

我们要先对照着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; }    }
View Code
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;            
View Code

注意这里,我只给第一个交通银行赋值name="a"之后只是查找这一个数据。 

要进行其他操作大家可以自己试试。

在储存数据里面也讲到了对xml和Json的序列化/反序列化,直接使用自带方法就行。

下一篇再写写。

Linq查询操作语句学习