LINQ to SQL – 如何select特定列并返回强types列表
我试图使用LINQ to SQL来从表中select一些特定的列,并返回结果作为一个强types的对象列表。
例如:
var result = (from a in DataContext.Persons where a.Age > 18 select new Person { Name = a.Name, Age = a.Age } ).ToList();
任何帮助将不胜感激。
它build立好,但是当我运行它,我得到的错误。 不允许在查询中显式构造实体typesMyEntity
。
基本上你正在做正确的方式。 但是,您应该使用DataContext
的实例进行查询( DataContext
是您的查询中的实例或types名称并不明显):
var result = (from a in new DataContext().Persons where a.Age > 18 select new Person { a.Name, a.Age }).ToList();
显然, Person
类是您的LINQ to SQL生成的实体类。 你应该创build自己的类,如果你只想要一些列:
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>
交换,而不会影响任何东西(因为这是编译器所做的)。
否则,如果你在查询的本地工作,我build议考虑一个匿名types:
var result = (from a in new DataContext().Persons where a.Age > 18 select new { a.Name, a.Age }).ToList();
请注意, 在所有这些情况下 , result
是静态types的 (它的types在编译时已知)。 后一种types是编译器生成的匿名类的List
,类似于我上面写的PersonInformation
类。 从C#3.0开始,语言中没有dynamicinput。
更新:
如果你真的想要返回一个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();
你也可以把上面的语句合并起来,但为了清晰起见,我把它们分开了
事实上,其中一个属性是与另一个表格的关系。 我改变了我的LINQ查询,以便它可以从不同的方法获得相同的数据,而无需加载整个表。
感谢大家的帮助!