我一直试图了解如何处理这个问题,我认为Linq可能是要走的路,但不确定如何。
我有许多记录,每个记录附有许多声明,例如:
我的用户拥有多项声明:
我需要匹配记录的所有声明,因此在上面的示例中,用户记录匹配record1和record3
要明确的是,根据评论,如果用户拥有所有声明,我想要所有记录
Linq可以这样做吗?
答案 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;
在英语中,这说明我们拥有的每条记录,我们都会匹配至少一个与用户的声明匹配的声明,并仅返回这些记录的记录。这也假设您已实施Equals
和GetHashCode
方法,因此您可以比较声明。