使用右连接将SQL转换为linq(高级)

时间:2014-06-10 02:13:19

标签: c# sql linq

我有以下SQL语句:

    SELECT dh.* 
FROM table1 w
 LEFT OUTER JOIN table2 dh
            on     w.CBranch        = dh.CBranch 
               AND w.CWorkstation   = dh.CWorkstation
               AND w.CNumber        = dh.CNumber               
 RIGHT OUTER JOIN table3 dl
            on     dh.Id = dl.DispatchHeaderId
               AND w.CLine = dl.CLine
               AND w.CLineVersion = dl.CVersion            
    where       w.ItemStatus = 9 
          AND   dh.Shipping = 0 
    ORDER BY dh.CNumber ASC

我是Linq的初学者,不知道如何做高级的linq。

有人可以指导我为此写一个等效的linq。

我正在使用C#,EF4。

我已经设法到达这里,但不确定这是否正确。

var wos = scope.Context.table1.Where(
                            a => a.ItemStatus == (short)LineStatus.Packed)
                            .GroupBy(a => new { a.CNumber, a.CBranch, a.CWorkstation})
                            .Select(a => a.FirstOrDefault()).ToList();

            var headerGroups = new List<IEnumerable<table2>>();
            foreach(var status in wos)
            {                    
                if (status == null)
                {
                    continue;
                }

                var headerList = scope.Context.table2s.Where(
                    b => b.CBranch == status.CBranch &&
                        b.CNumber == status.CNumber &&
                        b.CWorkstation == status.CWorkstation).ToList();

                if (headerList != null && headerList.Any())
                {
                    headerGroups.Add(headerList);
                }
            };

1 个答案:

答案 0 :(得分:0)

以下面的链接方式使用defaultifemty()方法....

http://smehrozalam.wordpress.com/2009/06/10/c-left-outer-joins-with-linq/