LINQ结果对象初始化器

时间:2015-10-12 12:15:05

标签: c# linq

我将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对象。

3 个答案:

答案 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()