您好我有一个模型,我必须计算条件的行: 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))
但这是不正确的。
我该怎么办?
感谢
答案 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())
应该可以解决问题,但我真的建议处理整数而不是字符串。