将晚期绑定实体类与 LINQ 查询结合使用
发布日期: 2017年1月
适用于: Dynamics 365 (online),Dynamics 365 (on-premises),Dynamics CRM 2016,Dynamics CRM Online
在 Microsoft Dynamics 365 和 Microsoft Dynamics 365 (online) 中,可以对 .NET 语言集成查询 (LINQ) 查询使用晚期绑定。 晚期绑定使用属性逻辑名称并且在运行时解析。
本主题内容
在 Join 子句中使用晚期绑定
在左联接中使用晚期绑定
使用晚期绑定和 Contains 方法
使用晚期绑定和不等于运算符
使用 GetAttributeValue 方法
在 Join 子句中使用晚期绑定
下面的示例演示如何在 LINQ 查询的 join 子句中使用晚期绑定。
检索表示客户主要联系人和客户名称的联系人全名。
using (OrganizationServiceContext orgSvcContext = new OrganizationServiceContext(_serviceProxy))
{
var query_join2 = from c in orgSvcContext.CreateQuery("contact")
join a in orgSvcContext.CreateQuery("account")
on c["contactid"] equals a["primarycontactid"]
select new
{
contact_name = c["fullname"],
account_name = a["name"]
};
foreach (var c in query_join2)
{
System.Console.WriteLine(c.contact_name + " " + c.account_name);
}
}
Using orgSvcContext As New OrganizationServiceContext(_serviceProxy)
Dim query_join2 = From c In orgSvcContext.CreateQuery("contact") _
Join a In orgSvcContext.CreateQuery("account") _
On c("contactid") Equals a("primarycontactid") _
Select New With {Key .contact_name = c("fullname"),
Key .account_name = a("name")}
For Each c In query_join2
Console.WriteLine(c.contact_name.ToString() & " " _
& c.account_name.ToString())
Next c
End Using
检索联系人、客户和潜在顾客数据,其中潜在顾客为原始潜在顾客且联系人姓氏不是“Parker”
using (OrganizationServiceContext orgSvcContext = new OrganizationServiceContext(_serviceProxy))
{
var query_dejoin = from c in orgSvcContext.CreateQuery("contact")
join a in orgSvcContext.CreateQuery("account")
on c["contactid"] equals a["primarycontactid"]
join l in orgSvcContext.CreateQuery("lead")
on a["originatingleadid"] equals l["leadid"]
where (string)c["lastname"] != "Parker"
select new { Contact = c, Account = a, Lead = l };
foreach (var c in query_dejoin)
{
System.Console.WriteLine(c.Account.Attributes["name"] + " " +
c.Contact.Attributes["fullname"] + " " + c.Lead.Attributes["leadid"]);
}
}
Using orgSvcContext As New OrganizationServiceContext(_serviceProxy)
Dim query_dejoin = From c In orgSvcContext.CreateQuery("contact") _
Join a In orgSvcContext.CreateQuery("account")
On c("contactid") Equals a("primarycontactid") _
Join l In orgSvcContext.CreateQuery("lead") _
On a("originatingleadid") Equals l("leadid") _
Select New With {Key .Contact = c,
Key .Account = a,
Key .Lead = l}
For Each c In query_dejoin
Console.WriteLine(c.Account.Attributes("name").ToString() _
& " " _
& c.Contact.Attributes("fullname").ToString() _
& " " _
& c.Lead.Attributes("leadid").ToString())
Next c
End Using
在左联接中使用晚期绑定
以下示例显示如何使用左联接检索联系人和客户信息列表。 左联接设计用于从两个源中返回具有和不具有子级的父级。 父与子之间存在关联,但实际上可能不存在任何子级。
using (OrganizationServiceContext orgSvcContext = new OrganizationServiceContext(_serviceProxy))
{
var query_join9 = from a in orgSvcContext.CreateQuery("account")
join c in orgSvcContext.CreateQuery("contact")
on a["primarycontactid"] equals c["contactid"] into gr
from c_joined in gr.DefaultIfEmpty()
select new
{
account_name = a.Attributes["name"]
};
foreach (var c in query_join9)
{
System.Console.WriteLine(c.account_name);
}
}
Using orgSvcContext As New OrganizationServiceContext(_serviceProxy)
Dim query_join9 = From a In orgSvcContext.CreateQuery("account") _
Group Join c In orgSvcContext.CreateQuery("contact") _
On a("primarycontactid") Equals c("contactid") Into gr = _
Group From c_joined In gr.DefaultIfEmpty() _
Select New With {Key .account_name = a.Attributes("name")}
For Each c In query_join9
Console.WriteLine(c.account_name)
Next c
End Using
使用晚期绑定和 Contains 方法
以下示例演示如何在 LINQ 查询中使用晚期绑定和 Contains 方法。
using (OrganizationServiceContext orgSvcContext = new OrganizationServiceContext(_serviceProxy))
{
var query_contains3 = from c in orgSvcContext.CreateQuery("contact")
where ((string)c["description"]).Contains("Coho")
select new
{
firstname = c.Attributes["firstname"],
lastname = c.Attributes["lastname"]
};
foreach (var c in query_contains3)
{
System.Console.WriteLine(c.firstname + " " + c.lastname);
}
}
Using orgSvcContext As New OrganizationServiceContext(_serviceProxy)
Dim query_contains3 = From c In orgSvcContext.CreateQuery("contact") _
Where (CStr(c("description"))).Contains("Coho") _
Select New With
{Key .firstname = c.Attributes("firstname"),
Key .lastname = c.Attributes("lastname")}
For Each c In query_contains3
Console.WriteLine(c.firstname.ToString() & " " _
& c.lastname.ToString())
Next c
End Using
使用晚期绑定和不等于运算符
以下示例演示不等于运算符的用法。
using (OrganizationServiceContext orgSvcContext = new OrganizationServiceContext(_serviceProxy))
{
var query_ne3 = from c in orgSvcContext.CreateQuery("contact")
where !c["address1_city"].Equals(null)
select new
{
FirstName = c["firstname"],
LastName = c["lastname"],
Address1_City = c["address1_city"]
};
foreach (var c in query_ne3)
{
System.Console.WriteLine(c.FirstName + " " +
c.LastName + " " + c.Address1_City);
}
}
Using orgSvcContext As New OrganizationServiceContext(_serviceProxy)
Dim query_ne3 = From c In orgSvcContext.CreateQuery("contact") _
Where (Not c("address1_city").Equals(Nothing)) _
Select New With {Key .FirstName = c("firstname"),
Key .LastName = c("lastname"),
Key .Address1_City =
c("address1_city")}
For Each c In query_ne3
Console.WriteLine(c.FirstName.ToString() & " " _
& c.LastName.ToString() & " " _
& c.Address1_City.ToString())
Next c
End Using
使用 GetAttributeValue 方法
以下示例演示如何使用 GetAttributeValue 方法检索联系人信息。
using (OrganizationServiceContext orgSvcContext = new OrganizationServiceContext(_serviceProxy))
{
var list_getattrib1 = (from c in orgSvcContext.CreateQuery("contact")
where c.GetAttributeValue<Guid?>("contactid") != _contactId1
select new {
FirstName = c.GetAttributeValue<string>("firstname"),
LastName = c.GetAttributeValue<string>("lastname")
}).ToList();
foreach (var c in list_getattrib1)
{
System.Console.WriteLine(c.FirstName + " " + c.LastName);
}
}
Using orgSvcContext As New OrganizationServiceContext(_serviceProxy)
Dim list_getattrib1 = ( _
From c In orgSvcContext.CreateQuery("contact") _
Where Not c.GetAttributeValue(Of Guid?)("contactid") _
.Value.Equals(_contactId1) _
Select New With
{
Key .FirstName = c.GetAttributeValue(Of String)("firstname"),
Key .LastName = c.GetAttributeValue(Of String)("lastname")}
).ToList()
For Each c In list_getattrib1
Console.WriteLine(c.FirstName & " " & c.LastName)
Next c
End Using
另请参阅
CreateQuery<TEntity>
使用 LINQ(.NET 语言集成查询)构建查询
将实体属性与 LINQ 结合使用的订单结果
Microsoft Dynamics 365
© 2017 Microsoft。 保留所有权利。 版权