2016-03-01 79 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, 
    });