【发布时间】:2023-03-10 05:52:01
【问题描述】:
我有一个 Blazor 应用程序,该应用程序显示一个事件日志,该应用程序还具有一个多选下拉菜单,该下拉菜单输出一个可拆分的字符串,用于过滤“SourceContext”类型。我想像下面那样动态构建“Where”子句,下面的代码显然不起作用,但代表了我想要实现的目标。 我已经尝试过 Predicates 并阅读了一些 Dynamic LINQ 站点来解决这个问题,此时我完全感到困惑。感谢您对此提供的任何帮助。
string[] strAr = str.ToString().Split(",");
string ctxFlt = string.Empty;
for (int x = 1; x < strAr.Count(); x++)
{
if (x == 1)
{
ctxFlt += strAr[x].ToString();
}
else
{
ctxFlt += " and s.SourceContext == strAr[x].ToString();
}
}
evLog = logdb.Logs.Where(s => s.SourceContext == $"{ctxFlt}").OrderByDescending(t => t.Timestamp).ToList();
【问题讨论】:
-
本能地,我觉得您不需要 Dynamic Linq 或 Predicate Builder。似乎是
Contains()或Except()的工作。请参阅here 获取一些线索。 -
我完全同意你的看法。包含正是我想要使用的。问题是当我尝试将过滤器变量连接起来看起来像“a,b,c”时,我没有得到任何记录。如果我只使用一个变量,它就可以工作。 ctxFlt += strAr[x].ToString(); ... ...其中 e.SourceContext.Contains(ctxFlt) ...
-
包含向后 - 尝试 Where(s => strArs.Contains(s.SourceContext))