铸造变量时出错

时间:2016-03-01 10:16:18

标签: c#

我尝试转换查询时出错。这是查询的代码:

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; }
}

有人可以帮我解决吗?

2 个答案:

答案 0 :(得分: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类之间的差异/重叠是模棱两可的。

答案 1 :(得分:0)

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

  1. 您不能将匿名类型转换为声明的类型
  2. 您不能将不相关的类型彼此强制转换(command / convention),除非您只是倾斜地粘贴了错误的代码以供我们查看/弄清楚)
  3. 你不能将一种类型的List<T>转换为另一种类型,如果由于协方差而使得泛型相关,则IEnemurable可以工作。
  4. 在构造函数中使用显式类型而不是匿名对象更新了代码,我再次认为您的意思是“约定”,但如果不将其更改为您需要的类型。

    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,
        });