2

「メソッド「結合」はサポートされていません」というエラーが表示されます...面白いことに、最初のLINQを2番目のバージョンに変換しただけで機能しません...

私が欲しかったのはLINQバージョン#3でしたが、うまくいきません...


これは機能します

var query_join9 = from s in orgSvcContext.CreateQuery(ServiceAppointment.EntityLogicalName)
join b in orgSvcContext.CreateQuery(bh_product.EntityLogicalName)
on s["bh_contract"] equals b["bh_contract"]
where ((EntityReference)s["bh_contract"]).Id == Guid.Parse("09BDD5A9-BBAF-E111-A06E-0050568B1372")
select new
{
Events = s,
Products = b
};

これはしません

var query_join9 = from s in orgSvcContext.CreateQuery(ServiceAppointment.EntityLogicalName)
join b in orgSvcContext.CreateQuery(bh_product.EntityLogicalName)
on new { contractid = s["bh_contract"] }
equals new { contractid = b["bh_contract"] }
where ((EntityReference)s["bh_contract"]).Id == Guid.Parse("09BDD5A9-BBAF-E111-A06E-0050568B1372")
select new
{
Events = s,
Products = b
};

また、これは複合結合であり、私が本当に目指しているものではありません

var query_join9 = from s in orgSvcContext.CreateQuery(ServiceAppointment.EntityLogicalName)
join b in orgSvcContext.CreateQuery(bh_product.EntityLogicalName)
on new { contractid = s["bh_contract"], serviceid = s["serviceid"] }
equals new { contractid = b["bh_contract"], serviceid = s["serviceid"] }
where ((EntityReference)s["bh_contract"]).Id == Guid.Parse("09BDD5A9-BBAF-E111-A06E-0050568B1372")
select new
{
Events = s,
Products = b
};

早期バインディングを試しましたが、まだ機能しません...

var query_join9 = from s in orgSvcContext.CreateQuery<ServiceAppointment>()
join b in orgSvcContext.CreateQuery<bh_product>()
on new { foo = s.bh_contract.Id }
equals new { foo = b.bh_Contract.Id }
where s.bh_contract.Id == Guid.Parse("09BDD5A9-BBAF-E111-A06E-0050568B1372")
select new
{
Events = s,
Products = b
};

まだ機能していません

var query_join9 = from s in orgSvcContext.CreateQuery<ServiceAppointment>()
join b in orgSvcContext.CreateQuery<bh_product>()
on new { s.bh_contract.Id, s.ServiceId }
equals new { b.bh_Contract.Id, ServiceId = b.bh_Service }
where s.bh_contract.Id == Guid.Parse("09BDD5A9-BBAF-E111-A06E-0050568B1372")
select new
{
Events = s,
Products = b
};

しかし、私は単にここで例を実行しようとしています単一の結合で複数のフィールドでLINQで結合を行う方法

私は何が欠けていますか?

前もって感謝します

4

2 に答える 2

1

どのCRMを使用しているかは完全にはわかりませんが、何かを誤解していると思います。LINQクエリが機能するためには、基になるデータソースのLINQプロバイダーが必要です。たとえば、演算子の使用法などのチェーンをデータソースのクエリAPIに変換するためのコードのビットJoinですWhere。 。これは、SQL、カスタムクエリ言語、またはメソッドのチェーンである可能性があります。

2つのLINQプロバイダー(たとえば、自分で作成した1つのLINQ to DataSetカスタムプロバイダーといくつかのカスタムプロバイダー)は、同じメソッドや他のコードをサポートする必要はありません。LINQプロバイダーがサポートするLINQメソッド(および/または他の埋め込みステートメント)の正確なサブセットは、その実装によって異なります。

そのように見ると、使用しているLINQプロバイダーが、複数のフィールドを使用する結合の標準構文を理解していないように見えるか、匿名型の使用法をまったく理解していないように見えるのは当然のことです。

私のアドバイスは、提供されているLINQプロバイダーのドキュメントを検索して、サポートされているクエリ操作を確認することです(おそらく、この特定のクエリモードがサポートされていないというメモがあります)。それができない場合は、他の何らかのクエリ(等結合を含まないクエリ)に頼る必要があります。おそらく、最良のオプションは、結合を別々に実行してから、2つの結果グループを交差させることです。それは本当にケースの詳細に依存します。

于 2012-07-13T01:24:55.537 に答える
1

MSDNのサンプルをご覧になりましたか。複数列結合の例がいくつかあります。

using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{
 var list_join = (from a in svcContext.AccountSet
                  join c in svcContext.ContactSet
                  on a.PrimaryContactId.Id equals c.ContactId
                  where a.Name == "Contoso Ltd" &&     <<--- multiple join here
                  a.Address1_Name == "Contoso Pharmaceuticals"
                  select a).ToList();
 foreach (var c in list_join)
 {
  System.Console.WriteLine("Account " + list_join[0].Name
      + " and it's primary contact "
      + list_join[0].PrimaryContactId.Id);
 }
}

この他のスレッドは関連する可能性があります

于 2012-07-20T15:17:49.603 に答える