加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – LINQ to SQL – 如何选择特定的列和返回强类型列表

发布时间:2020-12-15 19:21:59 所属栏目:asp.Net 来源:网络整理
导读:我试图使用LINQ to SQL从表中选择几个特定的??列,并返回结果作为强类型的对象列表。 例如: var result = (from a in DataContext.Persons where a.Age 18 select new Person { Name = a.Name,Age = a.Age } ).ToList(); 任何帮助将不胜感激。 它构建正常,
我试图使用LINQ to SQL从表中选择几个特定的??列,并返回结果作为强类型的对象列表。

例如:

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

任何帮助将不胜感激。

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

解决方法

基本上你是做正确的方式。但是,您应该使用DataContext的实例进行查询(DataContext不是一个实例或查询中的类型名称并不明显):
var result = (from a in new DataContext().Persons
              where a.Age > 18
              select new Person { a.Name,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 { a.Name,a.Age }).ToList();

你可以自由交换var与List< PersonInformation>这里不影响任何东西(因为这是编译器做的)。

否则,如果你在本地使用查询,我建议考虑一个匿名类型:

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

注意,在所有这些情况下,结果是静态类型的(它的类型在编译时是已知的)。后一种类型是一个编译器生成的匿名类的列表,类似于我上面写的PersonInformation类。从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();

你也可以合并上面的语句,但为了清楚起见我把它们分开了。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读