基本上,你做这件事的方式是正确的.但是,您应该使用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到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();
在这里,你可以自由地将var
和List<PersonInformation>
交换,而不影响任何事情(compiler就是这样做的).
否则,如果您在本地处理查询,我建议您考虑使用匿名类型:
var result = (from a in new DataContext().Persons
where a.Age > 18
select new { a.Name, a.Age }).ToList();
注意in all of these cases,result
是statically typed(它的类型在编译时是已知的).后一种类型是编译器生成的匿名类的List
,类似于我上面写的PersonInformation
类.从C#3.0开始,该语言中没有动态输入.
更新:
如果你真的想退回List<Person>
(这可能是最好的 Select ,也可能不是),你可以这样做:
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();
你也可以合并上面的陈述,但为了清晰起见,我把它们分开了.