码迷,mamicode.com
首页 > 其他好文 > 详细

Linq查询操作语句学习

时间:2014-10-20 23:20:52      阅读:295      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   os   ar   使用   for   

对于一个集合,我们通常会用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数据

bubuko.com,布布扣
<?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我直接分开来了,而不再定义一个类了)

bubuko.com,布布扣
    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
bubuko.com,布布扣
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 == "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查询操作语句学习

标签:style   blog   http   color   io   os   ar   使用   for   

原文地址:http://www.cnblogs.com/yffswyf/p/4039069.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!