C# 无法从';Microsoft.Xrm.Sdk.Query.QueryExpression';至';Microsoft.Crm.Sdk.Query.QueryBase

C# 无法从';Microsoft.Xrm.Sdk.Query.QueryExpression';至';Microsoft.Crm.Sdk.Query.QueryBase,c#,asp.net-mvc,dynamics-crm,C#,Asp.net Mvc,Dynamics Crm,我用下面的代码得到上面的错误 我在某个地方读到,我应该删除对Microsoft.Crm.Sdk.dll的所有引用,但这不起作用。如果可以,请协助 using System; using System.Collections.Generic; using Microsoft.Xrm.Sdk; using InvoiceMVCApp.Models; using Microsoft.Xrm.Sdk.Query; using Microsoft.Xrm.Client.Services; us

我用下面的代码得到上面的错误

我在某个地方读到,我应该删除对
Microsoft.Crm.Sdk.dll
的所有引用,但这不起作用。如果可以,请协助

using System;

using System.Collections.Generic;

using Microsoft.Xrm.Sdk;

using InvoiceMVCApp.Models;

using Microsoft.Xrm.Sdk.Query;

using Microsoft.Xrm.Client.Services;

using Microsoft.Xrm.Client;

namespace InvoiceMVCApp.DAL
{

    public class DAL_InvoicesEntity
    {
        public List<InvoicesModel> RetriveRecords()
        {
            var connection = new CrmConnection("Server=CRM Online");
            using (OrganizationService service = new OrganizationService("ConnectionString", connection))
            {
                QueryExpression query = new QueryExpression
                {
                    EntityName = "invoice",
                    ColumnSet = new ColumnSet("invoiceid", "customer", "invoicename", "paymentreceived", "commission", "adminfee", "discountamount")
                };
                List<InvoicesModel> info = new List<InvoicesModel>();
                EntityCollection invoiceRecord = service.RetrieveMultiple(query);

                if (invoiceRecord != null && invoiceRecord.Entities.Count > 0)
                {
                    InvoicesModel invoiceModel;
                    for (int i = 0; i < invoiceRecord.Entities.Count; i++)
                    {
                        invoiceModel = new InvoicesModel();
                        if (invoiceRecord[i].Contains("invoiceid") && invoiceRecord[i]["invoiceid"] != null)
                            invoiceModel.InvoiceID = (Guid)invoiceRecord[i]["invoiceid"];
                        if (invoiceRecord[i].Contains("customer") && invoiceRecord[i]["customer"] != null)
                            invoiceModel.ClientName = ((EntityReference)invoiceRecord[i]["customer"]);
                        if (invoiceRecord[i].Contains("invoiceid") && invoiceRecord[i]["invoiceid"] != null)
                            invoiceModel.InvoiceNumber = invoiceRecord[i]["invoiceid"].ToString();
                        if (invoiceRecord[i].Contains("commission") && invoiceRecord[i]["commission"] != null)
                            invoiceModel.Commission = (decimal)(invoiceRecord[i]["commission"]);
                        if (invoiceRecord[i].Contains("adminfee") && invoiceRecord[i]["adminfee"] != null)
                            invoiceModel.AdminFee = (decimal)invoiceRecord[i]["adminfee"];
                        if (invoiceRecord[i].Contains("discountamount") && invoiceRecord[i]["discountamount"] != null)
                            invoiceModel.Discount = ((decimal)invoiceRecord[i]["discountamount"]);
                        info.Add(invoiceModel);
                    }
                }
                return info;
            }
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用Microsoft.Xrm.Sdk;
使用InvoiceMVCApp.Models;
使用Microsoft.Xrm.Sdk.Query;
使用Microsoft.Xrm.Client.Services;
使用Microsoft.Xrm.Client;
名称空间InvoiceMVCApp.DAL
{
公共类DAL_发票
{
公共列表检索记录()
{
var连接=新的CRM连接(“服务器=CRM联机”);
使用(OrganizationService服务=新的OrganizationService(“ConnectionString”,connection))
{
QueryExpression query=新建QueryExpression
{
EntityName=“发票”,
ColumnSet=新列集(“发票ID”、“客户”、“发票名称”、“收到的付款”、“佣金”、“管理费”、“折扣金额”)
};
列表信息=新列表();
EntityCollection invoiceRecord=service.RetrieveMultiple(查询);
如果(invoiceRecord!=null&&invoiceRecord.Entities.Count>0)
{
发票模型发票模型;
对于(int i=0;i
尝试清理->重建。没有必要删除引用,您可以使用全名,也就是Microsoft.Xrm.Sdk.Query.QueryExpression Query=新的Microsoft.Xrm.Sdk.Query.QueryExpression(){}

您的列集中似乎有无效的列名。
“客户”
应该是
“客户ID”

“发票名称”
应该是
“名称”

自定义字段,如
“adminfee”
“佣金”
、和
“paymentreceived”
,将始终根据创建它们的解决方案使用前缀(默认值为
新建

此外,当前通过SDK连接的首选方法是Microsoft.Xrm.Tooling.Connector命名空间中的类

要找到它,您可以在NuGet中搜索“Xrm工具”

此外,如果要将结果强制转换到自定义InvoicesModel类中,可能需要研究使用工具自动生成包含D365实体属性的代理类的编程风格。这避免了为从系统检索的数据创建自己的“模型”类的需要

下面是一个工作示例,让您了解一些可能性:

using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using Microsoft.Xrm.Tooling.Connector;
using System;
using System.Collections.Generic;
using System.Linq;

public class InvoicesModel
{
    public Guid? InvoiceID { get; set; }
    public EntityReference ClientName { get; set; }
    public string InvoiceNumber { get; set; }
    public string Name { get; set; }
    public bool? PaymentReceived { get; set; }
    public decimal? Commission { get; set; }
    public decimal? AdminFee { get; set; }
    public decimal? DiscountAmount { get; set; }
}

public List<InvoicesModel> RetrieveInvoiceModels(string connectionString)
{
    var svc = new CrmServiceClient(connectionString);

    var query = new QueryExpression
    {
        EntityName = "invoice",                
        ColumnSet = new ColumnSet("invoiceid", "customerid", "invoicenumber", "name", "discountamount"),
        TopCount = 10
        ///Invalid column names: "paymentreceived", "commission", "adminfee",
    };

    var invoices = svc.RetrieveMultiple(query).Entities.ToList();

    var invoiceModels = invoices.Select(i =>
        new InvoicesModel
        {
            InvoiceID = i.GetAttributeValue<Guid>("invoiceid"),
            ClientName = i.GetAttributeValue<EntityReference>("customerid"),
            InvoiceNumber = i.GetAttributeValue<string>("invoicenumber"),
            Name = i.GetAttributeValue<string>("name"),
            DiscountAmount = i.GetAttributeValue<Money>("new_discountamount")?.Value

            ///for when columnn names are fixed:
            //PaymentReceived = i.GetAttributeValue<bool>("new_paymentreceived")
            //AdminFee = i.GetAttributeValue<Money>("new_adminfee")?.Value,
            //Commission = i.GetAttributeValue<Money>("new_commission")?.Value,
        })
        .ToList();
    return invoiceModels;
}
使用Microsoft.Xrm.Sdk;
使用Microsoft.Xrm.Sdk.Query;
使用Microsoft.Xrm.Tooling.Connector;
使用制度;
使用System.Collections.Generic;
使用System.Linq;
公共类发票模型
{
公共Guid?发票ID{get;set;}
公共EntityReference客户端名称{get;set;}
公共字符串InvoiceNumber{get;set;}
公共字符串名称{get;set;}
公共布尔?PaymentReceived{get;set;}
公共十进制?佣金{get;set;}
公共十进制数?AdminFee{get;set;}
公共十进制?折扣装入{get;set;}
}
公共列表检索NVoiceModels(字符串连接字符串)
{
var svc=新的CrmServiceClient(connectionString);
var query=newqueryexpression
{
EntityName=“发票”,
ColumnSet=新列集(“发票ID”、“客户ID”、“发票编号”、“名称”、“折扣金额”),
TopCount=10
///无效列名:“paymentreceived”、“commission”、“adminfee”,
};
var invoices=svc.RetrieveMultiple(query.Entities.ToList();
var invoiceModels=发票。选择(i=>
新发票模式
{
InvoiceID=i.GetAttributeValue(“InvoiceID”),
ClientName=i.GetAttributeValue(“customerid”),
InvoiceNumber=i.GetAttributeValue(“InvoiceNumber”),
Name=i.GetAttributeValue(“名称”),
折扣金额=i.GetAttributeValue(“新折扣金额”)?.值
///对于固定列名称的情况:
//PaymentReceived=i.GetAttributeValue(“新的PaymentReceived”)
//AdminFee=i.GetAttributeValue(“新的AdminFee”)?.值,
//佣金=i.GetAttributeValue(“新佣金”)?.价值,
})
.ToList();
退货发票模型;
}

hi Aron,这真的很有帮助,谢谢你,这个错误