我尝试转换查询时出错。这是查询的代码:
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; }
}
有人可以帮我解决吗?
答案 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中指定您的类型。
command
/ convention
),除非您只是倾斜地粘贴了错误的代码以供我们查看/弄清楚)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,
});