如何在Linq中仅为选定列使用INCLUDE?

Red*_*wan 3 c# linq sql-server include entity-framework-4.1

我正在使用具有表对象关联的多个linq include方法的场景.假设场景是:

User has Groups
User has Permissions
User has Vehicles

var _users=
(from u in dbconetxt.Users
join g in dbconetxt.Gropus on u.userId equals g.userId
join p in dbconetxt.Permissions on u.userId equals p.userId
join v in dbconetxt.Vehicles on u.userId equals v.userId
Where u.Status=true
select u).Include(u.Groups)
         .Include(u.Permissions)
         .Include(u.Vehicles)
         .ToList()
Run Code Online (Sandbox Code Playgroud)

在单个查询中加入所有这些表后,我选择了用户对象.当然,我会得到List,但我希望每个用户对象都应包含其各自的组,权限,车辆,但是来自车辆和权限,我只想加载少数列/属性,而不是全部.那么,如何指定在此方案中加载哪些列?

我正在使用Entity Framework 4.1 + C#+ SQL Server.

Kra*_*zek 6

Include是附加到IQueryable的扩展方法.这意味着你必须在DbSet用户上使用它.

如果只想选择指定的列,可以使用无参数构造函数创建匿名类型或类.

var users = from u in dbContext.Users.Include(u => u.Groups)
            where u.Status == true
            select new 
            {
                u.Name,
                u.Id,
                u.WhatSoEver
            };
Run Code Online (Sandbox Code Playgroud)

要么

var users = from u in dbContext.Users.Include(u => u.Groups)
            where u.Status == true
            select new UserView
            {
                Name = u.Name,
                Id = u.Id,
                Property1 = u.WhatSoEver
            };
Run Code Online (Sandbox Code Playgroud)