2016-03-01 82 views
-2

当我尝试转换查询时出现错误。这是查询的代码:铸造变量时出错

var query = (from article in db.V_CLIENT_PRIX 
       where article.CLIENT == Current_Client_Id 
        select new 
          { 
          ID = article.ID, 
          ARTICLE = article.Article, 
          REFERENCE = article.Reference, 
          REMISE = article.Remise, 
          PRIXVHT = article.PrixVHT, 
          CLIENT = article.CLIENT, 
          } 
      ); 

我投它是这样的:

ConventionList articlelistconvention = new ConventionList(); 
articlelistconvention = (ConventionList)query; 

这是我model:ConventionList

public class Commandelist 
{ 
    public string ARTICLE { get; set; } 
    public string CIN { get; set; } 
    public decimal STOCK { get; set; } 
    public string REFERENCE { get; set; } 
    public decimal PRIXVHT { get; set; } 
    public string IMAGE { get; set; } 
    public double QUANTITE { get; set; } 
} 

有人可以帮我解决它的代码?

+3

如果他们没有任何关系,你不能投一个对象 – Imad

+0

约定列表或Commandelist?这种投射不会奏效,但您可以实例化一个Commandelist的新实例并映射匹配的属性 – LDJ

回答

2

你可能会用鸭子打字的语言,如Javascript;但是,在C#中这是不可能的。如果接口和/或继承允许你这样做,你通常只能投射对象。您在Linq查询中创建的动态对象不会与您尝试投射的对象共享祖先。

在特定的代码示例虽然有速战速决:

var query = (
    from article in db.V_CLIENT_PRIX 
    where article.CLIENT == Current_Client_Id 
    select new ConventionList       // < --- change here!! 
    { 
     ID = article.ID, 
     ARTICLE = article.Article, 
     REFERENCE = article.Reference, 
     REMISE = article.Remise, 
     PRIXVHT = article.PrixVHT, 
     CLIENT = article.CLIENT, 
    }); 

然而,得到这个工作完全对您的情况可能需要一些调整,因为你的问题是含糊不清的之间的区别/重叠动态对象,ConventionList类和CommandeList类。

0

您需要在SELECT中指定您的类型。

  1. 你不能投匿名类型声明类型
  2. 你不能投类型无关彼此(command/convention),除非你只是slopely粘贴错误的代码为我们在/图看出来)
  3. 您不能将一种类型的List<T>转换为另一种类型,如果泛型因协方差而相关,则IEnemurable可以工作。

在构造函数中使用显式类型而不是匿名对象更新代码,我认为您的意思是约定,但是如果不是将其更改为您需要的类型。

var query = (
    from article in db.V_CLIENT_PRIX 
    where article.CLIENT == Current_Client_Id 
    select new Convention() 
    { 
    ID = article.ID, 
    ARTICLE = article.Article, 
    REFERENCE = article.Reference, 
    REMISE = article.Remise, 
    PRIXVHT = article.PrixVHT, 
    CLIENT = article.CLIENT, 
    });