我有一个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我需要另一个连接。
这可能吗?如果是的话,我该如何设置呢?
谢谢!
答案 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]