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

本文关键字:linq 高级 转换 SQL 连接 | 更新日期: 2023-09-27 18:08:04

我有以下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);
                }
            };

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

在以下链接方式中使用defaultifemty()方法....

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