Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq-将用户声明与记录声明匹配_C#_Linq - Fatal编程技术网

C# Linq-将用户声明与记录声明匹配

C# Linq-将用户声明与记录声明匹配,c#,linq,C#,Linq,我一直在试图弄清楚如何处理这个问题,我认为Linq可能是一条出路,但不确定如何处理 我有许多记录,每个记录都附有一些索赔,例如: 记录1 索赔1 索赔2 记录2 索赔1 索赔4 记录3 索赔3 记录4 索赔4 我有一个用户,他有许多声明: 用户1 索赔1 索赔2 索赔3 我需要匹配记录的所有声明,因此在上面的示例中,用户记录匹配record1和record3 要明确的是,根据评论,如果用户拥有所有索赔,我需要所有记录 Linq能做到这一点吗?这是使用语句的地方 var result = from

我一直在试图弄清楚如何处理这个问题,我认为Linq可能是一条出路,但不确定如何处理

我有许多记录,每个记录都附有一些索赔,例如:

记录1 索赔1 索赔2 记录2 索赔1 索赔4 记录3 索赔3 记录4 索赔4 我有一个用户,他有许多声明:

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

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


Linq能做到这一点吗?

这是使用语句的地方

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

在英语中,这意味着对于我们拥有的每一条记录,我们都在匹配至少有一条声明与用户声明相匹配的记录,并且只返回这些记录。这还假设您已经实现了Equals和GetHashCode方法,以便可以比较声明。

您正在尝试获取所有记录,其中该记录的所有声明都位于来自该其他用户的声明集合中。您可以编写一个LINQ查询,其读起来或多或少与这些规范类似:

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

请注意,如果user.Claims是任意大小的集合,并且您在LINQ to对象中执行此操作,而不是使用数据库的查询提供程序,那么您应该首先将这些声明放入查询外部的哈希集中,因为这将有助于它更好地扩展。

claim1同时位于record1和record2?@MattBurland-没错。而且可能也在record2和Record4中。那么为什么user1匹配record1和record3,而不是record2。因为record2要求用户也拥有claim4Ok,所以您应该在问题中明确这一细节。如果用户拥有所有声明,则需要所有记录。这在LINQ中不是有效的联接语法。