需要将三个表连接在一起。
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)
进入一个表示要在我的视图中显示的对象的视图模型:
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
}
但是我在加入时遇到了问题:
List<CustomViewModel> list = new List<CustomViewModel>();
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.
还有另一种方法(如上所述)进行两个联接吗?
基于方法的语法在这里是行不通的,必须与查询语法一起使用:
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.Code2
}).ToList();
我假设您想加入UserHasPackages表,因为您想过滤特定用户的结果(我只是输入了’SomeUser’,因为我不确定’UserHasPackages.ApplicationUserId’的来源)不包含在视图模型中。
我相信类似以下内容的方法应该起作用:
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.Code2
});
您也可以使用查询语法来做到这一点:
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
};
问题内容: 我用多个(包括一个)编写了这个SQL请求。 它给了我预期的结果 。 但是,“ Id就像此请求的Linq等效项一样,将其放在应用程序的数据访问层中。 我尝试了类似的东西: 我试图适应这个问题,但我无法弄清楚。我对分组子请求的内部迷失了。 谁能解释我哪里错了? 专家提示:如果有人可以用lambda表达式编写等效项,则可获赠积分 问题答案: 要将SQL转换为LINQ查询理解: 将子选择转换为
问题内容: 我在SQL中有此查询,并且希望它使用Entity Framework 在LINQ中实现它,但是如何应用左外部联接的多个表? 问题答案: 这是使用LINQ实现左外部联接的方式。您应该使用GroupJoin(语法): 该查询联接了三个表。您可以以相同的方式加入其余表。
本文向大家介绍如何在C#中使用linq扩展方法执行左外部联接?,包括了如何在C#中使用linq扩展方法执行左外部联接?的使用技巧和注意事项,需要的朋友参考一下 使用INNER JOIN 时,结果集中仅包含匹配的元素。不匹配的元素将从结果集中排除。 使用LEFT OUTER JOIN时 ,左集合中的所有匹配元素+所有非匹配元素都包含在结果集中。 让我们通过一个示例了解实现左外部联接。考虑以下部门和雇
问题内容: 我想添加代表其他表计数的列。 我有3张桌子。 留言内容 主题 星星_吉文 我要结束于: Topic_Review 因此,基本上我想在3列中附加唯一值的计数(每个主题中给定的星数,在主题中具有消息的唯一用户以及每个主题中的唯一消息数)。 我希望最终也能够过滤类别(在两列中均可见)。 此外,我最终希望按加入的人数进行排序。例如,我将要有一个按钮,该按钮按升序按“星数”排序,或按降序按“用户
我想添加表示来自其他表的计数的列。 我有三张桌子。 消息 主题 STARS_GIVED 我想以: 主题回顾 所以基本上,我想附上3列唯一值的计数(每个主题中给出的星数,在主题中有消息的唯一用户,以及每个主题中唯一消息的数量)。 我希望最终能够对类别进行筛选(看看两列)。 此外,我希望最终按我加入的计数排序。例如,我将有一个按钮,按“星星的数目”按升序排序,或按“用户的数目”按降序排序,等等。 我试
本文向大家介绍linq 查询语法和方法语法,包括了linq 查询语法和方法语法的使用技巧和注意事项,需要的朋友参考一下 示例 查询语法和方法语法在语义上是相同的,但是许多人发现查询语法更简单易读。假设我们需要从一组数字中检索升序排列的所有偶数项。 C#: VB.NET: 请记住,某些查询必须表示为方法调用。例如,您必须使用方法调用来表达查询,该查询检索与指定条件匹配的元素数量。您还必须对查询使用方