实体框架嵌套条件

时间:2010-02-23 12:22:56

标签: linq entity-framework

您好我有一个模型,我必须计算条件的行: uscitaservizio == false和accountid属性(int)在字符串filtrodipe中

es:filtrodipe =“2,4,5,6”

我试过这个:

db.TDP_Missioni.Count( p => p.UscitaServizio == false && 
                    (objUser.FiltroDipe != null ? (p.AccountID.ToString() in objUser.FiltroDipe.Split(',')) : true))

但这是不正确的。

我该怎么办?

感谢

1 个答案:

答案 0 :(得分:0)

在这种情况下,我通常会将查询逻辑拉开以使其更容易阅读(将内联条件保留在查询本身之外)。为了简化我的示例,我不能安全地解析accountIds,但我建议你在最终代码中这样做(使用int.TryParse()代替)。

var missions = db.TDP_Missioni.Where(p => !p.UscitaServizio);

if (objUser.FiltroDipe != null)
{
    var accountIds = objUser.FiltroDipe.Split(',').Select(a => int.Parse(a));
    missions = missions.Where(m => accountIds.Contains(m.AccountID));
}

var missionCount = missions.Count();

如果您希望将这一切保留在一个查询中,则要查看的关键部分是accountIds.Contains(m.AccountID)(p.AccountID.ToString() in objUser.FiltroDipe.Split(','))更改为objUser.FiltroDipe.Split(',').Contains(p.AccountID.ToString())应该可以解决问题,但我真的建议处理整数而不是字符串。