var query = db.Customers
.Where("City == @0 and Orders.Count >= @1", "London", 10)
.OrderBy(someStringVariable)
.Select("new(CompanyName as Name, Phone)");
在运行此查询之前,如何通过表达式检查someStringVariable是否为有效订单? 我想检查它而不是捕获ParseException。
在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;
}
答案 0 :(得分:2)
很难做到100%的可靠性,但是您可以做的一件事就是将'someStringVariable'与表中的列列表进行比较。您可以通过
找到列列表.GetProperties().Select(property => property.Name).ToArray();
再次,您需要意识到这有很多陷阱。属性可以映射到与属性名称不同的列名称。