C# 实体-Linq to Sql仅加载实体的一部分

C# 实体-Linq to Sql仅加载实体的一部分,c#,linq-to-sql,entity-framework,.net-3.5,C#,Linq To Sql,Entity Framework,.net 3.5,如果我使用实体框架和linq to sql来查询它,我有一个对象Person,但我只需要该对象的两个属性,内存中的内容将被加载,整个对象 例如: 我得到了实体人的财产:姓名,年龄,地址,国家,语言 我只需要使用财产名称和年龄。所以我不需要加载地址、国家和其他属性。。。内存中会有什么,SQL将询问什么类型的查询 如果我的Linq查询是: public IQueryable<Person> FindAllPersons() { return from person in db.P

如果我使用实体框架和linq to sql来查询它,我有一个对象Person,但我只需要该对象的两个属性,内存中的内容将被加载,整个对象

例如:

我得到了实体人的财产:姓名,年龄,地址,国家,语言

我只需要使用财产名称和年龄。所以我不需要加载地址、国家和其他属性。。。内存中会有什么,SQL将询问什么类型的查询

如果我的Linq查询是:

public IQueryable<Person> FindAllPersons()
{
    return from person in db.Persons
           select person;
}
public IQueryable FindAllPersons()
{
以db.Persons格式从person返回
选择人员;
}

在后面的代码中,我只调用列表中每个人的姓名和年龄属性。

您只能查询所需的字段

这样,

public IQueryable<Person> FindAllPersons()
{
    return from person in db.Persons
           select new Person(){Name = person.Name, Age = person.Age};
}
public IQueryable FindAllPersons()
{
以db.Persons格式从person返回
选择new Person(){Name=Person.Name,Age=Person.Age};
}

如果使用LINQ选择整个person对象,那么当您访问该对象时,整个person将加载到内存中。如果只希望选择特定字段,则应优化选择条件。例如:

var persons = from p in db.Persons select new { p.Name, p.Age };

虽然这不是绝对必要的,但您可能需要指定是使用EF还是Linq2SQL。但是,根据您实际使用的SQL可能会有所不同

从您指定的查询中,绑定到数据库列的所有属性都将在对象上填充(只要它们不是实体引用)。您可能可以有效地在其他属性上使用延迟加载,但这不是一个全面的解决方案,在应用程序的不同领域可能会适得其反。总之,我想说,除非应用程序必须对内存非常敏感,否则只需按原样加载对象即可

只加载姓名和年龄

var list = db.Persons.Select(person => new Person() { Age = person.Age, Name = person.Name });

或者,对于不希望立即加载的所有列,可以将Delay Loaded设置为true。

设计器中的每个实体列都具有Delay Loaded属性。将其设置为true(defaut值为false)将禁用属性的即时加载,只有在代码中访问该属性时才会加载该属性。

public IQueryable GetApplicationRoleList()
public IQueryable<Persons> GetApplicationRoleList()
    {
        return DBContext.Persons.AsQueryable();
    }
{ 返回DBContext.Persons.AsQueryable(); }

)()

请给我一个例子或该选项的链接好吗?我试过了,得到了以下NotSupportedException:“不能在LINQ到Entities查询中构造实体或复杂类型'CompleteKitchenModel.Contact'。我在这里发布了一个问题: