将LINQ转换为表达式树

时间:2018-09-24 13:48:15

标签: c# linq

我想动态创建一个LINQ语句,该语句包括一个where语句,该语句必须根据页面列表中的项目进行扩展:

private IQueryable<WS_WebShopTreeNode> GetRootNodes(List<ShopTreePage> pages, IQueryable<WS_WebShopTreeNode> node_src)
{
 var rootNodes = from tn in node_src
                        where tn.id_WebShopTreeNode_AsParent == null &&
                              tn.PageNo == 1 && 
                              tn.PageNo == 2 &&
                              tn.PageNo == 3 &&
                              //etc.
                        select tn;
}

ShopTreePage只是一个枚举:

public enum ShopTreePage : byte
{
    Unassigned = 0,
    UserRole = 1,
    Hardware = 2,
    Software = 3,
    Zubehoer = 4,
    All = 5
}

我知道这可以通过表达式树来实现。不幸的是,我缺乏构建表达式树的知识。

1 个答案:

答案 0 :(得分:1)

您忘了告诉我们哪个属性是ShopTreePage,但我想它是PageNo

为什么您不能在这里简单地使用Contains

var rootNodes = from tn in node_src
                where tn.id_WebShopTreeNode_AsParent == null 
                 && pages.Contains((ShopTreePage)tn.PageNo)
                select tn;