2

三項演算子を使用する必要がある LINQ クエリがあるため、特定の基準に基づいて特定の結合が使用されます。これが私の質問です。

var lData = (from r in gServiceContext.CreateQuery("campaignresponse")
             join a in gServiceContext.CreateQuery("activityparty") on ((EntityReference)r["activityid"]).Id equals ((EntityReference)a["activityid"]).Id

             //tenary statement here 
             join c in gServiceContext.CreateQuery("contact") on ((EntityReference)a["partyid"]).Id equals c["contactid"]

              where ((EntityReference)r["new_distributorid"]).Id.Equals(lProfileProperty.PropertyValue)
              select new
          {
              });

これが私がやりたいことです。

r["new_distributorid"] == 1 の場合、次を使用する必要があります。

join c in gServiceContext.CreateQuery("contact") on ((EntityReference)a["partyid"]).Id equals c["contactid"]

r["new_distributorid"] == 2 の場合、次を使用する必要があります。

join c in gServiceContext.CreateQuery("account") on ((EntityReference)a["partyid"]).Id equals c["accountid"]

r["new_distributorid"] == 3 の場合、次を使用する必要があります。

join c in gServiceContext.CreateQuery("lead") on ((EntityReference)a["partyid"]).Id equals c["leadid"]

したがって、基本的には new_distributor == 1 です。2 の場合は別の結合が必要で、3 の場合は別の結合が必要な場合は、特定の結合を使用する必要があります。

これは可能ですか?もしそうなら、どうやってそれを設定しますか?

ありがとう!

4

1 に答える 1

3

変更されるのは単一の文字列値だけなので、クエリの定義を開始する前にその文字列値を決定してください。

string tableName = "";

switch(r["new_distributorid"])
{
  case(1): 
    tableName = "contact";
  case(2): 
    tableName = "account";
  case(3): 
    tableName = "lead";
}

string tableID = tableName + "id";

//...
join c in gServiceContext.CreateQuery(tableName) 
on ((EntityReference)a["partyid"]).Id equals c[tableID]
于 2012-09-26T19:37:02.047 に答える