C# 转换变量时出错

C# 转换变量时出错,c#,C#,当我尝试强制执行查询时,会出现错误。这是查询的代码: var query = (from article in db.V_CLIENT_PRIX where article.CLIENT == Current_Client_Id select new { ID = article.ID,

当我尝试强制执行查询时,会出现错误。这是查询的代码:

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;
这是我的
型号: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; }
}

有人能帮我修一下吗?

你可能来自一种带有duck类型的语言,比如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,
     });
var查询=(
摘自db.V_CLIENT_PRIX中的文章
其中article.CLIENT==当前\u客户端\u Id
选择新约定列表/<---在此处更改!!
{
ID=article.ID,
第条,
参考文献=文章参考文献,
REMISE=文章。REMISE,
PRIXVHT=article.PRIXVHT,
CLIENT=article.CLIENT,
});

但是,要使其完全适用于您的场景,可能需要进行一些调整,因为您的问题对于动态对象、
约定列表
类和
命令列表
类之间的差异/重叠不明确。

您需要在选择中指定您的类型

  • 不能将匿名类型强制转换为声明的类型
  • 您不能将不相关的类型彼此强制转换(
    命令
    /
    约定
    ),除非您只是草率地粘贴了错误的代码供我们查看/找出)
  • 不能将一种类型的
    List
    强制转换为另一种类型,如果泛型由于协方差而相关,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,
        });
    

    如果一个对象根本不是relatedConventionlist或Commandelist,则不能将其强制转换为另一个对象?此强制转换不起作用,但您可以实例化Commandelist的新实例并映射匹配的属性