gpt4 book ai didi

linq - Entity Framework /LINQ : Selecting columns from multiple tables?

转载 作者:行者123 更新时间:2023-12-01 19:25:57 26 4
gpt4 key购买 nike

型号:

 public class User
{
[Key]
public int UserId { get; set; }
public string UserName { get; set; }
}

public class Resource
{
[Key]
public int ResourceId { get; set; }
public string ResourceName { get; set; }
public string ResourceDescription { get; set; }
}

public class UserResource
{
[Key, Column(Order=0)]
public int UserId { get; set; }
[Key, Column(Order=1)]
public int ResourceId { get; set; }
public int ResourceQuantity { get; set; }
}

我想从给定“UserId”的资源模型中选择“ResourceName”,并从 UserResource 模型中选择“ResourceQuantity”。 此外,一旦选择,我是否需要一个全新的模型来仅承载这两个指定的列?

另请注意,UserResource 模型有一个复合键,因此我对如何进行连接感到困惑......这是正确的吗?

 var userResources =
from r in imDB.Resources
join ur in imDB.UserResources
on r.ResourceId equals ur.ResourceId
select new { r.ResourceName, ur.ResourceQuantity };

最佳答案

因此,您使用代码优先,您可以使用EF 约定创建如下模型。

public class User {
public int Id { get; set; }
public string UserName { get; set; }

public virtual ICollection<Resource> Resources { get; set; }
}

public class Resource {
public int Id { get; set; }
public string ResourceName { get; set; }
public int ResourceQuantity { get; set; }

public virtual ICollection<User> Users {get;set;}
}

然后 EF 将生成您的连接表,如 UsersResources。您不需要像以前那样创建额外的模型。EF 会负责处理。

When using POCOs with EF, if you mark your navigation properties as virtual you can use additional EF supports like Lazy Loading. So in general use a virtual keyword in navigation properties considered to be a good practice.

更新

您可以尝试如下操作:

方法 1: 基于方法的语法

imDB.Resources.Where(r => r.Users.Any(u => u.UserId == userId))

方法 2: 基于查询的语法

from r in imDB.Resources
from u in r.Users
where u.UserId == userId
select r;

希望这对您有帮助。

关于linq - Entity Framework /LINQ : Selecting columns from multiple tables?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14788942/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com