我试图使用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();
你也可以合并上面的语句,但为了清楚起见我把它们分开了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。