如何将动态对象转换为类型并进行比较

时间:2018-10-01 10:39:31

标签: c# linq dynamic salesforce

我有一个称为产品的模型,

public class Product
{                 
    public string Name { get; set; }

    public string Sku { get; set; }

    public float Cost { get; set; }

    public string Description { get; set; }        
}

我将从外部来源获取动态类型的对象列表,如下所示

string query = "SELECT Id,Name,KNDYCPQ__Description__c,KNDYCPQ__ProductCode__c FROM KNDY4__Product__c";
List<dynamic> products = new List<dynamic>();
products = await SalesforceSyncProvider.QueryAsync(query);
foreach (var x in products)
{
    Product product = new Product();
    if (db.Products.Where(a => a.Sku ==x.KNDYCPQ__ProductCode__c).FirstOrDefault() != null) {

    product.Name = x.Name;
    product.Sku = x.KNDYCPQ__ProductCode__c;
    product.Description = x.KNDYCPQ__Description__c;
    product.Cost = 2000;
    db.Products.Add(product);
    }
}

因此,在添加到数据库之前,我想用KNDYCPQ__ProductCode__c检查产品代码(Sku)以避免重复,但是if条件失败并显示以下错误:表达式树可能不包含动态操作。

1 个答案:

答案 0 :(得分:4)

x.KNDYCPQ__ProductCode__c放在一个强类型变量中,并在表达式中使用它。

string sku = x.KNDYCPQ__ProductCode__c;

if (db.Products.Where(a => a.Sku == sku).FirstOrDefault() != null) {

//...