|
三个表需要连接在一起。 Y) D1 _& z r9 S8 l! e7 y" n; p
Table [Package]ID (int)ContainerID (int)Code (string)Code2 (string)Table [UserHasPackages]UserID (Comes from Identity tables) (string)PackageID (int)Table [Container]ID (int)Name (string)Description (string)进入一个视图模型,表示要显示在我的视图中:) U" `+ L3 \/ l) N9 k
public class CustomViewModel{ public int ID { get; set; public string Name { get; set; // Container.Name public string Code { get; set; // Package.Code public string Code2 { get; set; // Package.Code2}但是我在加入时遇到了问题:
9 H/ n3 o: j0 o8 [List list = new List();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;list = context.Packages.Join( context.Containers, p => p.ContainerID, c => c.ID, (p,c) => new { p,c}) .Join( //error is here context.UserHasPackages, a => a.p.ID, b => b.ApplicationUserId, (a,b) => new { a,b ).Select(f => new CustomViewModel ID = f.p.ID, Name = f.c.Name, Code = f.p.Code, Code2 = f.p.Code2 }).ToList();Type arguments for method cannot be inherited from the usage. Try specifying the type arguments explicitly.还有另外两种连接方式(如上所述)吗?
7 B8 n+ B; |0 t: r解决方案
. I0 B, [) U0 F; \7 F+ o, l5 t$ |这里基于方法的语法行不通,必须与查询语法一起使用:* P2 L4 z0 \# l: b/ u! o* G
var query = (from package in context.Packages join container in context.Containers on package.ContainerID equals container.ID join userHasPackage in context.UserHasPackages on package.ID equals userHasPackage.PackageID where userHasPackage.UserID == "SomeUser" select new CustomViewModel ID = package.ID, Name = container.Name, Code = package.Code, Code2 = package.Code }.ToList();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; c; y7 ^2 |+ @% M0 H
解决方案: / N: m$ w2 C; ?( e
假设你想加入我UserHasPackages表,因为你想过滤特定用户的结果(我只是输入了’SomeUser’,因为我不确定’UserHasPackages.ApplicationUserId’视图模型中不包含来源)。- @3 a3 S5 A& |
我信类似以下内容的方法应该起作用:2 a6 Z/ J" p8 Z; V8 u9 M8 J$ [* \
var list = context.Packages .Join(context.Containers,p => p.ContainerID,c => c.ID,(p,c) => new { p,c .Join(context.UserHasPackages,pc => pc.p.ID,u => u.PackageID,(pc,u) => new { pc.p,pc.c,u .Where(pcu => pcu.u.UserID == "SomeUser") .Select(pcu => new pcu.p.ID, pcu.c.Name, pcu.p.Code, pcu.p.Code二 };也可以用查询语法来做到这一点:( O4 _( K; @8 B E, J
var query = from package in context.Packages join container in context.Containers on package.ContainerID equals container.ID join userHasPackage in context.UserHasPackages on package.ID equals userHasPackage.PackageID where userHasPackage.UserID == "SomeUser" select new package.ID, container.Name, package.Code, package.Code2 |
|