【发布时间】:2019-05-05 07:10:38
【问题描述】:
var query = db.Customers
.Where("City == @0 and Orders.Count >= @1", "London", 10)
.OrderBy(someStringVariable)
.Select("new(CompanyName as Name, Phone)");
在运行此查询之前,如何检查 someStringVariable 是否是按表达式的有效顺序? 我想检查它而不是捕获 ParseException。
- 有效字符串:“城市 ASC,电话 DESC”
- 无效字符串不是 DESC 中的现有字段或输入错误:“City1 DESC1”
在 Anu 的帮助下,我正在使用这个函数,但我更喜欢 Linq.Dynamic 命名空间中的一些“TryParseQuery”。
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;
}
【问题讨论】:
-
简短的回答是你不能 100% 可靠地做到这一点。
-
你能分享一些有效值和无效值的例子吗?