Согласен с Робертом, Contains должно быть достаточно, но вам нужен список (enum), а не массив для .Contains. Ваша реализация Contains - «String внутри String» ie foobar.Contains (foo) not a Linq Contains to build a SQL "WHERE field IN (x, y, z)"
var strAr = str.ToString().Split(",").ToArray().Distinct().ToList();
evLog = logdb.Logs.Where(s => strArs.Contains(s.SourceContext)).OrderByDescending(t => t.Timestamp).ToList();
Но если вам нужен полноценный динамический c запрос, вы бы сделали что-то вроде ниже ...
using System.Linq.Expressions;
string[] strAr = str.ToString().Split(",");
Expression conditions = Expression.Constant(false);
var parameter = Expression.Parameter(typeof(Log), "log");
for (int i = 0; i < strAr.Count(); i++)
{
Expression condition = Expression.Equal(
Expression.Property(parameter, "SourceContext"),
Expression.Constant(strAr[i])
);
conditions = Expression.OrElse(conditions, condition);
}
var expression = Expression.Lambda<Func<Log, Boolean>>(conditions, parameter);
var q = evLog = logdb.Logs.Where(expression).OrderByDescending(t => t.Timestamp).ToList();