首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

LINQ 内连接+右连接解决方案

2014-03-19 
LINQ 内连接+右连接朋友问我一个问题,三张表 A B CA和B内连接,然后和C右链接 A的主键IdB和C中的AId 是外键

LINQ 内连接+右连接
朋友问我一个问题,三张表 A B C  A和B内连接,然后和C右链接 A的主键Id  B和C中的AId 是外键,我这么写对不对?? 还有没有更好的写法??LINQ 内连接+右连接解决方案


using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            List<A> aas = new List<A>()
                              {
                                  new A(){ Id=1, AName="AName1"},
                                  new A(){ Id=2, AName="AName2"},
                                  new A(){ Id=3, AName="AName3"},
                                  new A(){ Id=4, AName="AName4"},
                              };

            List<B> bbs = new List<B>()
                              {
                                  new B(){ AId=1, BName="BName1"},
                                  new B(){ AId=2, BName="BName2"},
                                  new B(){ AId=3, BName="BName3"},
                                  new B(){ AId=4, BName="BName4"},
                              };

            List<C> ccs = new List<C>()
                              {
                                  new C(){ AId=1, CName="CName1"},
                                  new C(){ AId=2, CName="CName2"},
                                  new C(){ AId=3, CName="CName3"},
                                  new C(){ AId=4, CName="CName4"},
                                  new C(){ AId=5, CName="CName5"}
                              };

            var query = from a in aas
                        join b in bbs on a.Id equals b.AId into d
                        from e in d.DefaultIfEmpty()


                        select new
                                   {
                                       aId = a.Id,
                                       aName = a.AName,
                                       bName = e.BName
                                   };

            var query2 = ccs.Select(x => new
                                             {
                                                 Aid = x.AId,
                                                 CName = x.CName,
                                                 AName = query.SingleOrDefault(s => s.aId == x.AId) == null ? null : query.SingleOrDefault(s => s.aId == x.AId).aName,
                                                 BName = query.SingleOrDefault(s => s.aId == x.AId) == null ? null : query.SingleOrDefault(s => s.aId == x.AId).bName
                                             });
            Console.Read();
        }

    }

    public class A
    {
        public int Id { get; set; }
        public string AName { get; set; }
    }

    public class B
    {
        public int AId { get; set; }
        public string BName { get; set; }
    }

    public class C
    {
        public int AId { get; set; }
        public string CName { get; set; }
    }
}


[解决办法]
三张表 A B C  
A和B内连接,
然后和C右链接 A的主键Id 
B和C中的AId 是外键

最终想要什么样的结果?

热点排行