C# C LINQ到SQL多实体联接
我有一个表,其中包含了跨年度、品牌和客户划分的数据,我希望将这些数据与客户主表合并。我希望每个输出记录都是客户、当年的品牌1数量、当年的品牌2数量等以及品牌总数。 我创建了一个类来接收输出。 当我查看统计表中的数据时,其数据应符合所使用的标准,即debtorid、financialyearid和brandid 我的选择当前看起来像这样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
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链接之一:-