/// <summary>複数条件の場合はこのメソッドをその回数分呼び出してください。</summary> public Sqlam <T> OrderBy(Expression <Func <T, object> > field, Order order = Order.Asc) { var fieldName = ExprNameResolver.GetExprName(field.Body); parser.ParseOrderBy(fieldName, order); return(this); }
/// <summary>WHERE IN</summary> public Sqlam <T> In(Expression <Func <T, object> > field, IEnumerable <object> values) { var fieldName = ExprNameResolver.GetExprName(field.Body); parser.And(); parser.ParseIsIn(fieldName, values); return(this); }
/// <summary> /// 二項演算子。左辺にフィールド、右辺に値。WHERE条件式の構築に使用 /// </summary> public void ParseAnd(BinaryExpression node) { // 左辺チェック var fieldName = ExprNameResolver.GetExprName(node.Left); // 右辺チェック。リテラル、フィールド、プロパティなどExpressionTypeが様々なのでResolverを使う var fieldValue = ExprValueResolver.GetExprValue(node.Right); // オペレータチェック string oper; if (!operatorDict.TryGetValue(node.NodeType, out oper)) { throw new KeyNotFoundException("Suitable operator not found. Key is " + node.NodeType); } QueryByField(fieldName, oper, fieldValue); }