LINQ查询中的三元运算符

时间:2012-09-26 19:05:57

标签: c# linq dynamics-crm-2011

我有一个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我需要另一个连接。

这可能吗?如果是的话,我该如何设置呢?

谢谢!

1 个答案:

答案 0 :(得分: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]