【问题标题】:Filter a LINQ query过滤 LINQ 查询
【发布时间】:2010-06-18 13:59:45
【问题描述】:

这是我的查询。

var query = from g in dc.Group
            join gm in dc.GroupMembers on g.ID equals gm.GroupID
            where gm.UserID == UserID
            select new {
                id = g.ID,
                name = g.Name,
                pools = (from pool in g.Pool
                // more stuff to populate pools

所以我必须执行一些过滤,但是当我尝试过滤时

var filter = query.Where(f => f.pools.[no access to list of columns]  

我无法访问“池”中的任何项目。有谁知道我如何访问它?

我想做的是:

var filterbyGame = query.Where(f = > f.pools.GameName == "TestGame");

让我知道我是否有这个设置。

谢谢大家。

【问题讨论】:

  • 当然,pools 是池对象的集合。它本身没有 GameName 属性。你想如何执行匹配?匹配查询中至少有一个池且指定了GameName 的所有对象?或者匹配所有池 GameName 与参数相同的那些?
  • 匹配所有具有相同 GameName 的池。所以只需返回游戏名称为“Mega”的池。

标签: c# asp.net linq linq-to-objects


【解决方案1】:

在您的查询中,您不能执行 Where(f => f.pools.GameName) 因为 f 是一个 IEnumerable

这样的事情应该可以工作:

Where(f => f.pools.Any(p => p.GameName == "TestGame"))

【讨论】:

    【解决方案2】:

    pools 是一个枚举,而不是单个实例。这就是你没有得到列名的原因。

    您需要将过滤器更改为:

    var filterByGame = query.Where(f => f.pools.Any(p => p.GameName == "TestGame"));
    

    【讨论】:

    • 所以我尝试了这个; var test = query.Where(f => f.pools.Any(p => p.GameName == "Test"));不起作用。
    • @Jack Marchetti - 你确定 f.pools 包含 GameName 匹配项吗?始终仔细检查并确保。
    • 是的,我很肯定。我做了一个副本并过去了 == "GameName" 我什至尝试做一个 .ToLower() 以防万一。
    猜你喜欢
    • 2015-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多