Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq Include()仅包含特定属性_Linq_Entity Framework - Fatal编程技术网

Linq Include()仅包含特定属性

Linq Include()仅包含特定属性,linq,entity-framework,Linq,Entity Framework,这里我正在检索项目,包括项目的创建者。目标是只包含创建者的名字和姓氏,而不是整个用户模型 var items = _db.Items.Include("Creator") 项目模型将Creator作为如下导航属性: public User Creator { get; set; } 它工作得很好,但它加载了整个用户模型,而实际上我只需要名字和姓氏 如何指定我只希望从用户模型返回特定属性?您不能使用Include执行此操作。您可以使用选择: var items = _db.Item

这里我正在检索项目,包括项目的创建者。目标是只包含创建者的名字和姓氏,而不是整个用户模型

var items = _db.Items.Include("Creator")
项目模型将
Creator
作为如下导航属性:

      public User Creator { get; set; }
它工作得很好,但它加载了整个用户模型,而实际上我只需要名字和姓氏


如何指定我只希望从用户模型返回特定属性?

您不能使用
Include
执行此操作。您可以使用
选择

var items = _db.Items.Select(i => new { Item = i, Creator = new { i.Creator.FirstName, i.Creator.LastName } });
更新

如果需要将该查询作为方法结果返回,则必须创建一个可以保存结果的类:

public class ItemWithCreatorNames
{
    public Item Item { get; set; }
    public string CreatorFirstName { get; set; }
    public string CreatorLastName { get; set; }
}

var items = _db.Items.Select(i => new ItemWithCreatorNames { Item = i, CreatorFirstName  = i.Creator.FirstName, CreatorLastName  = i.Creator.LastName });

我如何将其作为IQueryable返回?我似乎遗漏了一个步骤——你不能用一部分属性来具体化实体对象。这可能会创建无效的实体。您必须投影到另一个类,匿名或命名。为此定义DTO或视图模型类是很常见的。