【问题标题】:sql where clause rule in linqlinq中的sql where子句规则
【发布时间】:2021-07-14 21:44:42
【问题描述】:

我正在尝试将我的 SQL 规则放在 Linq 中,因为我的规则是从查询生成器生成的,我需要根据规则过滤我的数据,这是我的简单示例

class Program
{
    static void Main(string[] args)
    {
        PromotionVm lObjPromVm = new PromotionVm();
        for (int i = 1; i <= 5; i++)
        {
            PromotionList lObjPromList = new PromotionList();
            lObjPromList.active_indicator = 1;
            lObjPromList.principle_code = "a" + i;
            lObjPromList.promotion_code = "b" + i;
            lObjPromList.promotion_plan_number = 20 + i;
            lObjPromList.promotion_type_code = 30 + i;
            lObjPromList.start_date = DateTime.Now.AddDays(i);
            lObjPromVm.promotion_list.Add(lObjPromList);
        }

        //var sqlRule= "promotion_type_code = 'expensive' AND Category IN('Food', 'Transportation', 'Shopping') AND(PaymentMode = 'Cash' OR PaymentMode = 'Debit Card' OR(Amount = 35))";
        var sqlRule = "promotion_type_code = '33'";
        //  lObjPromVm.promotion_list.ToDataTable()
        var lOutlut = lObjPromVm.promotion_list.Where(sqlRule);
    }
}

class PromotionVm
{
    public List<PromotionList> promotion_list { get; set; }
    public PromotionVm()
    {
        promotion_list = new List<PromotionList>();
    }
}
    
public class PromotionList
{
    public string principle_code { get; set; }
    public string promotion_code { get; set; }
    public int promotion_plan_number { get; set; }
    public int promotion_type_code { get; set; }
    public DateTime start_date { get; set; }
    public int active_indicator { get; set; }
}

我正在尝试使用System.Linq.Dynamic.Core;,但无法正常工作。

谁能建议我如何按 SQL 规则过滤我的数据? 在这里问了同样的问题How to use a string in the linq where clause? 但是响应给定的内容,它不起作用。

【问题讨论】:

  • 试试Func&lt;Promotion, bool&gt; sqlRule = p =&gt; p.promotion_type_code = "33";
  • 嗨,我想根据 sql 规则进行过滤,该规则可以是我从前端获得的 sql where 子句之类的任何东西。例如 - //var sqlRule= "promotion_type_code = 'expensive' AND Category IN('Food', 'Transportation', 'Shopping') AND(PaymentMode = 'Cash' OR PaymentMode = 'Debit Card' OR(Amount = 35) )";
  • @charlieface,错字:你要在“33”之前加倍等号:public =&gt; p.promotion_type_code == "33"
  • 听起来是个坏主意,如果有人输入1=1; DROP DATABASE YourDb --会发生什么
  • 我们可以在处理请求之前随时检查、删除、删除、截断等任何关键字。

标签: c# linq


【解决方案1】:

我能够解决问题,我只需要转换为AsQueryable()

var sqlRule = "promotion_type_code in (31,33) or (promotion_code=\"b2\")";
var lOutlut = lObjPromVm.promotion_list.AsQueryable().Where(sqlRule);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    相关资源
    最近更新 更多