我试图使用LINQ到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 { Name = a.Name, Age = 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 { Name = a.Name, Age = 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();
请注意, 在所有这些情况下 , result
是静态类型 (它的类型是在编译时已知)。 后一种类型是一个List
类似于一个编译器生成的匿名类的PersonInformation
I类上面写的。 作为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();
您可以合并上述表述过,但我把他们分开的清晰度。
问题是在事实的特性之一是另一个表的关系。 我改变了我的LINQ查询,以便它可以得到从不同的方法相同的数据,而无需加载整个表。
感谢大家的帮助!
请对数据库的调用与身份识别码(该行的标识),搜索并取回特定的列:
var columns = db.Notifications
.Where(x => x.Id == myid)
.Select(n => new { n.NotificationTitle,
n.NotificationDescription,
n.NotificationOrder });
文章来源: LINQ to SQL - How to select specific columns and return strongly typed list