我正在使用实体框架核心,我在使用导航属性的查询时遇到问题。 Product
是实体,Provider
是相关实体。
这个例子很容易理解。
var query = _context.Products
.Include(p => p.Provider)
.Where(p => ValidationExtensions.ValidatesFilter("something", p.Name));
其中ValidatesFilter是扩展方法:
internal static class ValidationExtensions
{
public static bool ValidatesFilter(this string str, string referenceStr)
{
if (str == null)
{
return true;
}
if (referenceStr == null)
{
return false;
}
return string.IsNullOrEmpty(str) || ValidateStr(str, referenceStr);
}
private static bool ValidateStr(string str, string referenceStr)
{
if (str.StartsWith("*"))
{
return referenceStr.EndsWith(AsString(str.Skip(1)), StringComparison.OrdinalIgnoreCase);
}
if (str.EndsWith("*"))
{
return referenceStr.StartsWith(AsString(str.TakeWhile(c => c != '*')), StringComparison.OrdinalIgnoreCase);
}
if (str.Contains('*'))
{
bool containsAllChunks;
var chunksToCheck = str.Split(new[] { "*" }, StringSplitOptions.RemoveEmptyEntries);
containsAllChunks = chunksToCheck.All(s => referenceStr.Contains(s, StringComparison.OrdinalIgnoreCase));
return containsAllChunks;
}
return string.Equals(str, referenceStr, StringComparison.OrdinalIgnoreCase);
}
private static string AsString(this IEnumerable<char> characters)
{
return string.Concat(characters);
}
}
我正在尝试使用导航属性进行过滤,因此我使用的是Include,但在运行代码时,p.Provider
为null
,因此失败。似乎Include
未加载导航属性。
那怎么办呢?非常感谢提前!