zoukankan      html  css  js  c++  java
  • LINQ连接查询

    用LINQ进行连接查询,感觉挺别扭,还是用SQL比较舒服,故记录一下,以备后用。

    先把数据列出来

        class Pet
        {
            public string PetName { get; set; }
            public string OwnerName { get; set; }
        }
    
        class Person
        {
            public string FirstName { get; set; }
            public string LastName { get; set; }
        }
     List<Person> persons = new List<Person>()
            {
                new Person(){FirstName="Zhang",LastName="San"},
                new Person(){FirstName="Li",LastName="Si"},
                new Person(){FirstName="Wang",LastName="Wu"},
                new Person(){FirstName="Zhao",LastName="Liu"}
                
            };
    
            List<Pet> pets = new List<Pet>() 
            { 
                new Pet(){PetName="Cat",OwnerName="Zhang"},
                new Pet(){PetName="Dog",OwnerName="Si"},
                new Pet(){PetName="Monkey",OwnerName="Wang"},
                new Pet(){PetName="Panda",OwnerName="Liu"},
                new Pet(){PetName="King Kong"}
            };

    来一个最简单的做链接查询与右连接查询:

     左连接

    var p = from person in persons
                        join pet in pets
                        on person.FirstName equals pet.OwnerName into petsOrEmpty
                        from pet in petsOrEmpty.DefaultIfEmpty()
                        select new
                        {
                            FirstName = person.FirstName,
                            LastName = person.LastName,
                            PetName = pet == null ? string.Empty : pet.PetName
    
                        };
                foreach (var i in p)
                    Console.WriteLine("{0} {1}:{2}", i.FirstName, i.LastName, i.PetName);
    
                //结果为:
                //Zhang San:Cat
                //Li Si:
                //Wang Wu:Monkey
                //Zhao Liu:
    

    右连接

    var p = from pet in pets
                        join person in persons
                        on pet.OwnerName equals person.FirstName into perdonsOrEmpty
                        from person in perdonsOrEmpty.DefaultIfEmpty()
                        select new
                        {
                            FirstName = person == null ? string.Empty : person.FirstName,
                            LastName = person == null ? string.Empty : person.LastName,
                            PetName = pet.PetName
    
                        };
    
                foreach (var i in p)
                    Console.WriteLine("{0} {1}:{2}", i.FirstName, i.LastName, i.PetName);
    
                //结果为:
                //Zhang San:Cat
                // :Dog
                //Wang Wu:Monkey
                // :Panda
                // :King Kong

    下面列举的连接条件不是一个单纯的相等条件,会带有AND 和 OR

    带AND的连接

    var p = from person in persons
                        join pet in pets
                        on new { FirstName = person.FirstName, LastName = person.LastName } equals 
                  new { FirstName = pet.OwnerName, LastName = pet.OwnerName } into petsOrEmpty from pet in petsOrEmpty.DefaultIfEmpty() select new { FirstName = person.FirstName, LastName = person.LastName, PetName = pet == null ? string.Empty : pet.PetName }; foreach (var i in p) Console.WriteLine("{0} {1}:{2}", i.FirstName, i.LastName, i.PetName); //结果为: //Zhang San: //Li Si: //Wang Wu: //Zhao Liu:

    下面这个例子个人觉得不是没用到连接,但也能达到连接的效果,若有哪位大师知道真正带OR的连接查询,请指点

    var p = from person in persons
                        from pet in pets
                        .Where(inner => person.LastName == inner.OwnerName ||
                     person.FirstName == inner.OwnerName).DefaultIfEmpty() select new { FirstName = person.FirstName, LastName = person.LastName, PetName = pet.PetName }; foreach (var i in p) Console.WriteLine("{0} {1}:{2}", i.FirstName, i.LastName, i.PetName); //结果为: //Zhang San:Cat //Li Si:Dog //Wang Wu:Monkey //Zhao Liu:Panda
  • 相关阅读:
    正则表达式(四)--文本换行分割
    java加密类型和算法名称
    记事本记录日志
    DNS
    jstl--c:choose标签
    csv文本编辑引号问题
    JDBC----ReflectionUtils
    Jsp
    计算机网络 编程 总结:
    N颗骰子的问题
  • 原文地址:https://www.cnblogs.com/HopeGi/p/LINQ.html
Copyright © 2011-2022 走看看