/// <summary> /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to /// the same compatibility standards as public APIs. It may be changed or removed without notice in /// any release. You should only use it directly in your code with extreme caution and knowing that /// doing so can result in application failures when updating to a new Entity Framework Core release. /// </summary> public virtual Expression Translate(MemberExpression memberExpression) { if (!typeof(IPoint).IsAssignableFrom(memberExpression.Member.DeclaringType)) { return(null); } var storeType = memberExpression.FindSpatialStoreType(); var isGeography = string.Equals(storeType, "geography", StringComparison.OrdinalIgnoreCase); var member = memberExpression.Member.OnInterface(typeof(IPoint)); if (_memberToPropertyName.TryGetValue(member, out var propertyName) || (isGeography ? _geographyMemberToPropertyName.TryGetValue(member, out propertyName) : _geometryMemberToPropertyName.TryGetValue(member, out propertyName))) { return(new SqlFunctionExpression( memberExpression.Expression, propertyName, memberExpression.Type, niladic: true)); } return(null); }