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,这真的很有帮助,谢谢你,这个错误