Linq - 匹配用户声明与记录声明

时间:2015-01-30 17:35:41

标签: c# linq

我一直试图了解如何处理这个问题,我认为Linq可能是要走的路,但不确定如何。

我有许多记录,每个记录附有许多声明,例如:

  • RECORD1
    • claim1
    • claim2
  • RECORD2
    • claim1
    • claim4
  • RECORD3
    • 要求3要求
  • RECORD4
    • claim4

我的用户拥有多项声明:

  • USER1
    • claim1
    • claim2
    • 要求3要求

我需要匹配记录的所有声明,因此在上面的示例中,用户记录匹配record1和record3

要明确的是,根据评论,如果用户拥有所有声明,我想要所有记录

Linq可以这样做吗?

2 个答案:

答案 0 :(得分:1)

您正试图获取所有记录的所有记录,其中所有记录的声明都在此其他用户的声明集合中。您可以编写一个或多或少读取类似规范的LINQ查询:

var query = records.Where(record => 
    record.Claims.All(recordClaim => user.Claims.Contains(recordClaim));

请注意,如果user.Claims是任何体面大小的集合,并且您在LINQ中执行此操作而不是使用数据库的查询提供程序,则应将这些声明放入HashSet首先(在查询之外),因为这将有助于它更好地扩展。

答案 1 :(得分:-1)

这是您使用join语句的地方。

var result = from r in records
         join c in user1.claims on r.claims.Contains(c)
         select r;

在英语中,这说明我们拥有的每条记录,我们都会匹配至少一个与用户的声明匹配的声明,并仅返回这些记录的记录。这也假设您已实施EqualsGetHashCode方法,因此您可以比较声明。

相关问题