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 回答