Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ结果到对象初始值设定项_C#_Linq - Fatal编程技术网

C# LINQ结果到对象初始值设定项

C# LINQ结果到对象初始值设定项,c#,linq,C#,Linq,我在将linq结果转换为对象时遇到问题 我有一个名为Plant的类和一个包含有关它的信息(例如名称、拉丁名、栖息地等)的数据库。 我想从已执行的查询中创建一个新对象,并将其发送到应用程序的另一部分。所以我把这段代码弄乱了: using (DataClassesDataContext dc = new DataClassesDataContext()) { var sPlant = (from p in dc.Plants where p.Name == plantName select

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

使用First或FirstOrDefault函数获取对象。请参阅以获取差异。

如果您的查询假设返回多个结果,请使用.TOList()。如果只想获取第一行,请使用FirstOrDefault()

因为
Plant
似乎不是数据存储的一部分,您需要返回一个Linq to SQL可以处理的对象,然后在本地创建
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();
}

发生了什么事?你收到错误信息了吗?输出是什么?它是一个
select
,所以我想这会创建一个
IEnumerable
或其他东西。添加一个
First()
。无法从'System.Linq.IQueryable'转换为'Zielnik.Plant'类型的未处理异常'System.NotSupportedException',不允许在查询中的System.Data.Linq.dllexplicit构造单元类型“Zielnik.Plant”中发生。这将导致再次编辑相同的异常。。。我有点生疏了,我必须找到一种方法来测试它。它以“SQL Server不提供比较数据类型NText、Text、Xml和Image”结束。