【发布时间】:2020-12-01 21:17:06
【问题描述】:
考虑以下代码:
public static IQueryable<T> WhereDynamic<T>(this IQueryable<T> sourceList, string query)
{
if (string.IsNullOrEmpty(query))
{
return sourceList;
}
try
{
var properties = typeof(T).GetProperties()
.Where(x => x.CanRead && x.CanWrite && !x.GetGetMethod().IsVirtual);
//Expression
sourceList = sourceList.Where(c =>
properties.Any(p => p.GetValue(c) != null && p.GetValue(c).ToString()
.Contains(query, StringComparison.InvariantCultureIgnoreCase)));
}
catch (Exception e)
{
Console.WriteLine(e);
}
return sourceList;
}
我创建了一个 .Net Standard 2.0 类型的项目,我想在其中使用上面的代码。 但问题是不能使用这个重载:
.Contains method (query, StringComparison.InvariantCultureIgnoreCase)
它不存在。在 .NET Core 项目中,没有问题。
对于Contains() 方法的重载,您有解决方案或替代方案吗?
【问题讨论】:
-
根据docs.microsoft.com/en-us/dotnet/api/… 应该没问题。现在自己测试一下。如果您可以在此处提供 minimal reproducible example 将会很有帮助 - 此处几乎所有代码都无关紧要,因为您只需要显示
string.Contains调用即可。 -
啊,我误读了文档 - 它没有提供每个重载版本信息。
-
Use .NET Standard 2.1 如果可以的话。
-
@JonSkeet:使用 .NetStandard 项目时出现此错误:错误 CS1501 方法“包含”没有重载需要 2 个参数
-
@CaiusJard:谢谢 - 我只是依赖底部的版本号,大概就是“存在任何这些重载的版本”。
标签: c# .net-core .net-standard