【问题标题】:How to use a dynamically-created string as a WHERE condition in Linq如何在 Linq 中使用动态创建的字符串作为 WHERE 条件
【发布时间】:2012-12-09 17:07:23
【问题描述】:

我必须创建返回 IQueryable 的方法,并且 tor 取决于确切的类型。 是否可以准备任何可以在 WHERE 语句之后使用的标准来获得它?

例如,if T == License i use "c.fkCustomer == Organization.Customer"

if T== People,我用"c.fkPeople== Organization.People"

XPQuery<T> cQuery = new XPQuery<T>(cSession);
IQueryable CurrQr = from c in cQuery 
                    where "c.fkCustomer == Organization.Customer" 
                    select c;

有人可以提出一些建议,如何实现这个目标?

【问题讨论】:

    标签: c# criteria


    【解决方案1】:

    我认为你最好在这里使用 lambda 作为参数而不是动态 linq。

    public IQueriable<T> MyQuery<T>(Expression<Func<T, bool>> predicate)
    {
        return new XPQuery<T>(cSession).Where(predicate)/*and any other bits you want at the moment this is a straight up where clause so kinda pointless*/;
    }
    

    然后你可以调用它:

    MyQuery(c=> c.fkCustomer == Organization.Customer)
    

    MyQuery(c=> c.fkPeople == Organization.People)
    

    【讨论】:

    • 我的代码有一个小错误:应该有“IQueryable CurrQr = from c in cQuery...”
    • @konopiuxkonopiux 我用我认为你的意思更新了这个
    【解决方案2】:

    是的,这可以做到。一种方法是使用动态查询库,您可以在此处找到它以及有关如何使用它的详细信息: http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-27
      • 1970-01-01
      • 2012-03-28
      • 1970-01-01
      相关资源
      最近更新 更多