我正在尝试使用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
答案 0 :(得分:78)
基本上你是以正确的方式做到的。但是,您应该使用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
类。从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();
您也可以合并上述语句,但为了清楚起见,我将它们分开。
答案 1 :(得分:3)
问题实际上是其中一个属性与另一个表的关系。我更改了我的LINQ查询,以便它可以从不同的方法获取相同的数据,而无需加载整个表。
谢谢大家的帮助!
答案 2 :(得分:0)
通过myid(该行的ID)调用数据库搜索,并返回特定的列:
var columns = db.Notifications
.Where(x => x.Id == myid)
.Select(n => new { n.NotificationTitle,
n.NotificationDescription,
n.NotificationOrder });