var query = db.Customers
.Where("City == @0 and Orders.Count >= @1", "London", 10)
.OrderBy(someStringVariable)
.Select("new(CompanyName as Name, Phone)");
Как я могу проверить, является ли someStringVariable действительным порядком заказа по выражению, прежде чем выполнять этот запрос?Я хочу проверить его вместо перехвата ParseException.
- Допустимая строка: "City ASC, Phone DESC"
- Недопустимая строка - это не существующее поле или опечатка в DESC: "City1 DESC1"
С помощью Anu я использую эту функцию, но я бы предпочел использовать «TryParseQuery» в пространстве имен Linq.Dynamic.
public static bool IsValidOrderString(Type type, string ordering)
{
if (string.IsNullOrWhiteSpace(ordering)) return false;
var orderList = ordering.Trim().Split(',');
var fields = type.GetProperties().Select(property => property.Name).ToArray();
foreach (var orderItem in orderList)
{
var order = orderItem.TrimEnd();
if (order.EndsWith(" ASC", StringComparison.InvariantCultureIgnoreCase) || order.EndsWith(" DESC", StringComparison.InvariantCultureIgnoreCase)) order = order.Substring(0, order.Length - 4);
if (!fields.Contains(order.Trim())) return false;
}
return true;
}