Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C LINQ到SQL多实体联接_C#_Sql_Linq_Entity Framework - Fatal编程技术网

C# C LINQ到SQL多实体联接

C# C LINQ到SQL多实体联接,c#,sql,linq,entity-framework,C#,Sql,Linq,Entity Framework,我有一个表,其中包含了跨年度、品牌和客户划分的数据,我希望将这些数据与客户主表合并。我希望每个输出记录都是客户、当年的品牌1数量、当年的品牌2数量等以及品牌总数。 我创建了一个类来接收输出。 当我查看统计表中的数据时,其数据应符合所使用的标准,即debtorid、financialyearid和brandid 我的选择当前看起来像这样 var Debtors = Dbs.Debtors; var BikeSales = Dbs.SalesBikes

我有一个表,其中包含了跨年度、品牌和客户划分的数据,我希望将这些数据与客户主表合并。我希望每个输出记录都是客户、当年的品牌1数量、当年的品牌2数量等以及品牌总数。 我创建了一个类来接收输出。 当我查看统计表中的数据时,其数据应符合所使用的标准,即debtorid、financialyearid和brandid

我的选择当前看起来像这样

            var Debtors = Dbs.Debtors;
            var BikeSales = Dbs.SalesBikes.DefaultIfEmpty();
            if (sortStatePostCode)
            {
                dquery = from y in Debtors
                         from a in BikeSales where a.DebtorID == y.ID && a.FinYearID == finYear.ID && a.BikeBrandID == 1
                         from b in BikeSales where b.DebtorID == y.ID && b.FinYearID == finYear.ID && b.BikeBrandID == 2
                         from c in BikeSales where c.DebtorID == y.ID && c.FinYearID == finYear.ID && c.BikeBrandID == 3
                         from d in BikeSales where d.DebtorID == y.ID && d.FinYearID == finYear.ID && d.BikeBrandID == 4
                         from e in BikeSales where e.DebtorID == y.ID && e.FinYearID == finYear.ID && e.BikeBrandID == 7
                         from f in BikeSales where f.DebtorID == y.ID && f.FinYearID == finYear.ID && f.BikeBrandID == 8
                         from g in BikeSales where g.DebtorID == y.ID && g.FinYearID == finYear.ID && g.BikeBrandID == 9
                         from h in BikeSales where h.DebtorID == y.ID && h.FinYearID == finYear.ID && h.BikeBrandID == 10

                         orderby y.SortDelState == null ? "ZZZZ" : y.SortDelState, y.SortDelPCode == null ? "9999" : y.SortDelPCode, y.CustomerName
                         select new DealerBikeResult
                         {
                             LongYear = finyear,
                             CustomerCode = y.CustomerCode,
                             CustomerName = y.CustomerName,
                             City = y.SortDelCity,
                             PostCode = y.SortDelPCode,
                             State = y.SortDelState,
                             Terms = y.TermsCode,
                             Total = (
                                 (f == null ? 0 : (int)f.TotalQty) +
                                 (g == null ? 0 : (int)g.TotalQty) +
                                 (a == null ? 0 : (int)a.TotalQty) +
                                 (b == null ? 0 : (int)b.TotalQty) +
                                 (c == null ? 0 : (int)c.TotalQty) +
                                 (d == null ? 0 : (int)d.TotalQty) +
                                 (e == null ? 0 : (int)e.TotalQty) +
                                 (h == null ? 0 : (int)h.TotalQty)
                             ),
                             Bombtrack = f == null ? 0 : (int)f.TotalQty,
                             Fairdale = g == null ? 0 : (int)g.TotalQty,
                             Mirraco = a == null ? 0 : (int)a.TotalQty,
                             Radio = b == null ? 0 : (int)b.TotalQty,
                             Redline = c == null ? 0 : (int)c.TotalQty,
                             Sunday = d == null ? 0 : (int)d.TotalQty,
                             United = e == null ? 0 : (int)e.TotalQty,
                             WTP = h == null ? 0 : (int)h.TotalQty,
                             DealerBO = y.DealerBombTrack == null ? 3 : (int)y.DealerBombTrack,
                             DealerFA = y.DealerFairdale == null ? 3 : (int)y.DealerFairdale,
                             DealerMI = y.DealerMirraco == null ? 3 : (int)y.DealerMirraco,
                             DealerRA = y.DealerRadio == null ? 3 : (int)y.DealerRadio,
                             DealerRL = y.DealerRedline == null ? 3 : (int)y.DealerRedline,
                             DealerSU = y.DealerSunday == null ? 3 : (int)y.DealerSunday,
                             DealerUN = y.DealerUnited == null ? 3 : (int)y.DealerUnited,
                             DealerWP = y.DealerWTP == null ? 3 : (int)y.DealerWTP
                         };
            }
无论我向查询发送什么financialyearid,我的返回集都是空的。 当我在SQLManagementStudio中创建一个视图时,我能够得到结果,它基本上实现了我想要得到的东西,但我不想使用视图

谁能给我指一下正确的方向吗。 编辑代码以修复一些拼写错误

其他几篇文章以其他方式解决了这个问题,即你应该使用multi-select还是Join-On等。。我找不到一个合适的连接,多栏等于工作从,我需要三栏选择,这就是为什么我尝试这种方式。其他帖子将此方法显示为实现连接,而其他帖子则建议此方法不起作用


使用连接。。。在…上equals格式在我使用多列时不起作用,否则我会使用它。

除了您没有正确地执行联接之外,查询where子句似乎不合适。不是应该是这样的吗

from a in Dbs.SalesBikes.DefaultIfEmpty() where a.DebtorID == y.ID && finYear.ID == a.FinYearID && a.BikeBrandID == 1
from b in Dbs.SalesBikes.DefaultIfEmpty() where b.DebtorID == y.ID && b.FinYearID == finYear.ID && b.BikeBrandID == 2
from c in Dbs.SalesBikes.DefaultIfEmpty() where c.DebtorID == y.ID && c.FinYearID == finYear.ID && c.BikeBrandID == 3
from d in Dbs.SalesBikes.DefaultIfEmpty() where d.DebtorID == y.ID && d.FinYearID == finYear.ID && d.BikeBrandID == 4
from e in Dbs.SalesBikes.DefaultIfEmpty() where  e.DebtorID == y.ID && e.FinYearID == finYear.ID && e.BikeBrandID == 7
from f in Dbs.SalesBikes.DefaultIfEmpty() where  f.DebtorID == y.ID && f.FinYearID == finYear.ID && f.BikeBrandID == 8
from g in Dbs.SalesBikes.DefaultIfEmpty() where  g.DebtorID == y.ID && g.FinYearID == finYear.ID && g.BikeBrandID == 9
from h in Dbs.SalesBikes.DefaultIfEmpty() where  h.DebtorID == y.ID && h.FinYearID == finYear.ID && h.BikeBrandID == 10

除了您没有正确地进行连接之外,查询where子句似乎不合适。不是应该是这样的吗

from a in Dbs.SalesBikes.DefaultIfEmpty() where a.DebtorID == y.ID && finYear.ID == a.FinYearID && a.BikeBrandID == 1
from b in Dbs.SalesBikes.DefaultIfEmpty() where b.DebtorID == y.ID && b.FinYearID == finYear.ID && b.BikeBrandID == 2
from c in Dbs.SalesBikes.DefaultIfEmpty() where c.DebtorID == y.ID && c.FinYearID == finYear.ID && c.BikeBrandID == 3
from d in Dbs.SalesBikes.DefaultIfEmpty() where d.DebtorID == y.ID && d.FinYearID == finYear.ID && d.BikeBrandID == 4
from e in Dbs.SalesBikes.DefaultIfEmpty() where  e.DebtorID == y.ID && e.FinYearID == finYear.ID && e.BikeBrandID == 7
from f in Dbs.SalesBikes.DefaultIfEmpty() where  f.DebtorID == y.ID && f.FinYearID == finYear.ID && f.BikeBrandID == 8
from g in Dbs.SalesBikes.DefaultIfEmpty() where  g.DebtorID == y.ID && g.FinYearID == finYear.ID && g.BikeBrandID == 9
from h in Dbs.SalesBikes.DefaultIfEmpty() where  h.DebtorID == y.ID && h.FinYearID == finYear.ID && h.BikeBrandID == 10

我相信我找到了一篇回答我问题的帖子。 显然,我确实需要在语法上使用Join,但我缺少的是需要模拟透明标识符,以便预处理器可以确保数据类型相同

我现在就试试看,如果成功的话,我会把这个作为答案


再次感谢Jon Skeet。

我相信我找到了一篇回答我问题的帖子。 显然,我确实需要在语法上使用Join,但我缺少的是需要模拟透明标识符,以便预处理器可以确保数据类型相同

我现在就试试看,如果成功的话,我会把这个作为答案


再次感谢乔恩·斯基特。

是的,马哈茂德,谢谢你。我已经编辑并转载了。是的,Mahmudul,谢谢。我已编辑并重新发布。请发布您找到的链接,然后是我找到的@jonsket链接之一:-请发布您找到的链接,然后是我找到的@jonsket链接之一:-