LINQ to SQL的 - 如何选择特定的列,并返回强类型列表(LINQ to SQL - How

2019-06-25 08:50发布

我试图使用LINQ到SQL从表中选择一些特定的列并返回结果为对象的强类型列表。

例如:

var result = (from a in DataContext.Persons
                              where a.Age > 18
                              select new Person
                              {
                                  Name = a.Name,
                                  Age = a.Age
                              }
                              ).ToList();

任何帮助将不胜感激。

它建立正常,但是当我运行它,我得到的错误。 实体类型的显式建筑MyEntity查询是不允许的。

Answer 1:

基本上你正在做正确的方式。 但是,你应该使用的实例DataContext查询(这不是明显的DataContext是一个实例或从您的查询类型名):

var result = (from a in new DataContext().Persons
              where a.Age > 18
              select new Person { Name = a.Name, Age = a.Age }).ToList();

显然, Person类是你的LINQ to SQL生成的实体类。 您应该创建自己的类,如果你只想要一些列:

class PersonInformation {
   public string Name {get;set;}
   public int Age {get;set;}
}

var result = (from a in new DataContext().Persons
              where a.Age > 18
              select new PersonInformation { Name = a.Name, Age = a.Age }).ToList();

你可以自由地交换varList<PersonInformation>这里不影响任何东西(因为这是编译器做什么)。

否则,如果您是在本地与查询工作,我建议考虑一个匿名类型:

var result = (from a in new DataContext().Persons
              where a.Age > 18
              select new { a.Name, a.Age }).ToList();

请注意, 在所有这些情况下result静态类型 (它的类型是在编译时已知)。 后一种类型是一个List类似于一个编译器生成的匿名类的PersonInformation I类上面写的。 作为C#3.0中,有一个在语言中没有动态类型。

更新:

如果你真的想返回一个List<Person> (这可能会或可能不会是最好的事情),你可以这样做:

var result = from a in new DataContext().Persons
             where a.Age > 18
             select new { a.Name, a.Age };

List<Person> list = result.AsEnumerable()
                          .Select(o => new Person {
                                           Name = o.Name, 
                                           Age = o.Age
                          }).ToList();

您可以合并上述表述过,但我把他们分开的清晰度。



Answer 2:

问题是在事实的特性之一是另一个表的关系。 我改变了我的LINQ查询,以便它可以得到从不同的方法相同的数据,而无需加载整个表。

感谢大家的帮助!



Answer 3:

请对数据库的调用与身份识别码(该行的标识),搜索并取回特定的列:

var columns = db.Notifications
                .Where(x => x.Id == myid)
                .Select(n => new { n.NotificationTitle, 
                                   n.NotificationDescription, 
                                   n.NotificationOrder });


文章来源: LINQ to SQL - How to select specific columns and return strongly typed list