Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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# 具有复合密钥的Linq Join()_C#_Linq - Fatal编程技术网

C# 具有复合密钥的Linq Join()

C# 具有复合密钥的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

我想用两张桌子提出请求

表页: Id,LangId(主键) PageTypeId,PageTypeLangId(外键)

表格页面类型: Id,LangId(主键)

那怎么办呢?在这里,我想只需添加PageTypeLangId

    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});