.net - 获取实体导航属性的子集

标签 .net linq entity-framework linq-to-entities

我有用户实体并与许多产品实体相关,我需要一种方法来获取用户实体及其产品的子集而不是所有产品。

var user = User.Include("Product").ToList();  // it returnes all the products.

我需要一种方法来仅用 15 个产品返回用户。

提前致谢...

最佳答案

您无法以其他方式过滤或影响加载到导航属性中的数据。当您使用相关实体的预先加载或延迟加载时,EF 只是不带任何条件地执行 LEFT OUTER JOIN。

您可以返回包含用户及其 15 个产品的匿名对象:

var query = from u in db.Users
            select new {
                User = u,
                Top15Products = u.Products.Take(15)
            };

注意 - 如果您加载了用户实体,那么您可以加载相关实体的过滤集合:

var user = db.Users.Find(1);

db.Entry(user)
  .Collection(u => u.Products)
  .Query()
  .Take(15)
  .Load();

此方法描述于Loading Related Entities文章。

关于.net - 获取实体导航属性的子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22504006/

相关文章:

c# - .Net 和 SQL Server 中的自定义字段

.net - OpenAuth .Net 声明请求始终为空

c# - 以 Windows 形式播放 youtube 视频

c# - LinqToSql 奇怪的行为

c# - 如何使用linq xml将命名空间添加到xml

c# - 防止重复的电子邮件地址进入数据库

c# - 在 C# 中是否有比较多个属性的快捷方式?

entity-framework - 如何在 Entity Framework 中使用内部联接删除或更新?

c# - 转换控制台应用程序部署的配置

c# - 检查一个 IEnumerable 是否包含另一个 IEnumerable 的所有元素