我将linq结果转换为对象时遇到问题。
我有一个名为Plant
的类和一个包含有关它的信息的数据库(例如名称,拉丁名称,栖息地等)。
我想从执行的查询中创建一个新对象,并将其发送到应用程序的另一部分。所以我搞乱了这段代码:
using (DataClassesDataContext dc = new DataClassesDataContext())
{
var sPlant = (from p in dc.Plants where p.Name == plantName select new Plant
{
Name = p.Name,
LatinName = p.LatinName,
Habitat = p.Habitat,
LeafHarvesting = p.LeafHarvesting,
FlowerHarvesting = p.FlowerHarvesting,
FruitHarvesting = p.FruitHarvesting,
RootHarvesting = p.RootHarvesting,
Morphology = p.Morphology,
Pharmacology = p.Pharmacology,
Img = p.Img,
GPSCoordinates = p.GPSCoordinates
}
);
但它没有将结果转换为新的Plant
对象。
答案 0 :(得分:1)
使用First或FirstOrDefault函数获取对象。请参阅here以获得不同之处。
答案 1 :(得分:1)
由于Plant
似乎不是数据存储的一部分,因此需要返回Linq to SQL可以处理的对象,然后在本地创建Plant
实例。
首先查询包含所需属性的匿名对象列表,然后只创建Plant
。最后添加First()
或FirstOrDefault()
只检索一个Plant
:
using (DataClassesDataContext dc = new DataClassesDataContext())
{
var sPlant = (from p in dc.Plants where p.Name == plantName
select new {
Name = p.Name,
LatinName = p.LatinName,
Habitat = p.Habitat,
LeafHarvesting = p.LeafHarvesting,
FlowerHarvesting = p.FlowerHarvesting,
FruitHarvesting = p.FruitHarvesting,
RootHarvesting = p.RootHarvesting,
Morphology = p.Morphology,
Pharmacology = p.Pharmacology,
Img = p.Img,
GPSCoordinates = p.GPSCoordinates
}).AsEnumerable().Select(p => new Plant
{
Name = p.Name,
LatinName = p.LatinName,
Habitat = p.Habitat,
LeafHarvesting = p.LeafHarvesting,
FlowerHarvesting = p.FlowerHarvesting,
FruitHarvesting = p.FruitHarvesting,
RootHarvesting = p.RootHarvesting,
Morphology = p.Morphology,
Pharmacology = p.Pharmacology,
Img = p.Img,
GPSCoordinates = p.GPSCoordinates
}).First();
}
答案 2 :(得分:0)
如果您的查询假设要返回多个结果,请使用.TOList()。如果您只想获取第一行,请使用FirstOrDefault()