Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.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#_.net_Linq_Entity Framework_Linq To Objects - Fatal编程技术网

C# 创建Linq查询时出错

C# 创建Linq查询时出错,c#,.net,linq,entity-framework,linq-to-objects,C#,.net,Linq,Entity Framework,Linq To Objects,我有一个这样的问题 struct MyStruct { public string name; public double amount; } var a = from p in Products select new MyStruct { name = p.Name, amount = p.Amount }; 当我执行查询时,我得到以下异常: System.NotSupportedException{“LINQ to实体中只支持无参数构造函数和初始值

我有一个这样的问题

struct MyStruct
{
  public string name;
  public double amount;
}

var a =
  from p in Products
  select new MyStruct
  {
    name = p.Name,
    amount = p.Amount
  };
当我执行查询时,我得到以下异常:

System.NotSupportedException{“LINQ to实体中只支持无参数构造函数和初始值设定项。”}

但是,如果我将MyStruct的类型更改为class,那么它将按预期工作


为什么它与类一起工作而与结构一起失败?

它与LinqToObjects一起工作。我猜LinqToEntities不知道如何创建结构。如果你这样做,你会没事的:

struct MyStruct
{
  public string name;
  public double amount;
}

var a = Products.AsEnumerable()
    .Select(p => new MyStruct
    {
        name = p.Name,
        amount = p.Amount
    };
试试这个:

struct MyStruct
{
            public string name;
            public double amount;
}

Products[] p1 = new Products[] { new Products { name = "prod1", amount = 5 }
var c = from p in p1
        select new MyStruct { name = p.name, amount = p.amount };

Linq to实体不支持投影到结构中。他们需要在查询提供程序中设计对此的支持,而他们只是选择不这样做。他们似乎认为它没有足够的价值来支持它,不值得花开发成本


您需要在查询中投射到新的类实例中。

但是,您没有将查询限制在指定的字段中,这是开始选择的关键点之一。如果您担心不从数据库中提取无关数据,您可以在这两者之间创建一个匿名类。我不明白他为什么要使用结构。我认为他更感兴趣的是“为什么”,然后是“我如何修复”。他似乎在试图避免创建所有这些类实例的开销,而是使用结构。正如他所说,使用一个类(不管它是否是匿名的)可以很好地工作,但是一个struct不行。@Shlomo yes我发布了这个问题来理解为什么它不能与struct一起工作。我用一个类修复了它,是的,我需要我的自定义类型,因为查询将由使用我的自定义类型作为返回类型的方法返回:IListHe没有对对象执行Linq,他使用的是查询提供程序,查询提供程序在解释这一点时遇到了困难。>LINQtoEntities不支持投影到结构中<您是如何得出这个结论的?你在什么地方读过吗?我不是质疑你的知识,我只是想知道你是否使用了某种机制来发现它,这样我将来也可以这样做。