使用SQL Server数据存储的实体框架为一对多关系建模

时间:2019-01-22 17:07:31

标签: asp.net entity-framework linq asp.net-core

我可以在诊断以下内容时获得帮助吗?

IQueryable<MyComponentsViewModel> vcvm = from v1 in pg.MyComponents 
                                         join item in Items on v1.Item equals item into vc
                                         select new MyComponentsViewModel 
                                                    {  Cost = item.Cost };

出现以下错误:

  

错误CS1941:join子句中的表达式之一的类型为   不正确调用“ GroupJoin”时类型推断失败。

由于item与v1.Item类型不同,是否发生此错误状态?

按键如下所示

ALTER TABLE [dbo].[MyComponents]  WITH CHECK ADD  CONSTRAINT 
[FK_MyComponents_Items] FOREIGN KEY([ItemId])
REFERENCES [dbo].[Items] ([Itemid])
GO

ALTER TABLE [dbo].[MyComponents] CHECK CONSTRAINT [FK_MyComponents_Items]

2 个答案:

答案 0 :(得分:1)

我假设您需要内部连接,而在做相等操作时,则需要使用其匹配的列ID来过滤记录,如下所示

IQueryable<MyComponentsViewModel> vcvm = 
    from myComp in pg.MyComponents 
    join item in Items on myComp.ItemId equals item.Id
    select new MyComponentsViewModel {   Cost = item.Cost };

答案 1 :(得分:1)

我能够使其正常工作。

名为“项”的动作之间存在歧义。完全指定名称空间即可解决此问题。 另外,我还必须添加语句“来自vc.DefaultIfEmpty中的子项目”

我仍在努力学习它的全部语义

IQueryable<MyComponentsViewModel> vcvm = 
    from v1 in pg.MyComponents 
    join item in pg.Items on v1.Item equals item into vc
    from subitem in vc.DefaultIfEmpty()
    select new MyComponentsViewModel {   Cost = subitem.Cost };