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(); 

你可以在这里自由地将varList<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查询,以便它可以从不同的方法获得相同的数据,而无需加载整个表。

感谢大家的帮助!