C# 具有复合密钥的Linq Join()
我想用两张桌子提出请求 表页: Id,LangId(主键) PageTypeId,PageTypeLangId(外键) 表格页面类型: Id,LangId(主键) 那怎么办呢?在这里,我想只需添加PageTypeLangIdC# 具有复合密钥的Linq Join(),c#,linq,C#,Linq,我想用两张桌子提出请求 表页: Id,LangId(主键) PageTypeId,PageTypeLangId(外键) 表格页面类型: Id,LangId(主键) 那怎么办呢?在这里,我想只需添加PageTypeLangId return context.Pages .Join(context.PageTypes, p => p.PageTypeId, pT => pT.Id,(p, pT) => new { p, pT }) 我想: sel
return context.Pages
.Join(context.PageTypes, p => p.PageTypeId, pT => pT.Id,(p, pT) => new { p, pT })
我想:
select * from Page inner join PageType on Page.PageTypeId=PageType.Id and Page.PageTypeLangId=PageType.LangId
谢谢你的帮助 以下方法应该有效:
return context.Pages
.Where(x => x.PageTypeLangId.HasValue)
.Join(context.PageTypes,
p => new { Id = p.PageTypeId,
LangId = p.PageTypeLangId.Value },
pT => new { pT.Id, pT.LangId },
(p, pT) => new { p, pT });
你为什么不加入LangId(主键)?这似乎是所描述的内部和外部选择器所需的一部分。你想要的结果是什么?我不知道如何添加另一个字段。。。我想:
select*from Page internal join PageType on Page.PageTypeId=PageType.Id和Page.PageTypeLangId=PageType.LangId
…我尝试了这个方法,但我有:Error 16方法'System.Linq.Enumerable.join'的类型参数(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable,System.Func,System.Func,System.Func)'无法从用法中推断。请尝试显式指定类型参数。D:\website\Dev\Master\DAO\Repository\PageRepository.cs 95 17 DAO
,如果您的数据类型不匹配,那么您的数据类型是什么。p.PageTypeLangId
?和pT.LangId
?p.PageTypeId和int的类型是什么,LangId@Olivier:我会使用HasValue
和Value
来代替where
中的HasValue
过滤掉所有没有页面类型语言ID的页面,这样你就可以安全地访问连接中的值。过滤掉它们不会减少结果集,因为它们无论如何都会被连接过滤掉,因为语言ID为null的页面类型将不存在。如果您收到“无法从用法推断。请尝试显式指定类型参数”消息,您可能还需要为两个匿名对象命名相同的密钥。它们在示例中都这样做了,但很容易被忽略。Join(context.PageTypes,p=>new{Id=p.PageTypeId,LangId=p.PageTypeLangId.Value},pT=>new{pT.**Id**,pT.**LangId**},(p,pT)=>new{p,pT});