Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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# 获取所有用户,仅当它们不出现在另一个表中时_C#_Entity Framework - Fatal编程技术网

C# 获取所有用户,仅当它们不出现在另一个表中时

C# 获取所有用户,仅当它们不出现在另一个表中时,c#,entity-framework,C#,Entity Framework,我有两张桌子。一个用户表和一个表,其中放置了某个测试的结果 当用户进行测试时,其结果和用户id将放在结果表中。如果用户从未参加过测试,那么显然他的用户id不会出现在结果表中 我需要获取结果表中没有的所有用户。有没有一种方法可以在一个查询中实现这一点?实体框架 获取所有用户很容易。但现在我需要一种方法将其链接到结果表,以查看我希望在结果集中包含哪些用户 (from u in entity.Users [where not in results table..??] select u); 使用模

我有两张桌子。一个用户表和一个表,其中放置了某个测试的结果

当用户进行测试时,其结果和用户id将放在结果表中。如果用户从未参加过测试,那么显然他的用户id不会出现在结果表中

我需要获取结果表中没有的所有用户。有没有一种方法可以在一个查询中实现这一点?实体框架

获取所有用户很容易。但现在我需要一种方法将其链接到结果表,以查看我希望在结果集中包含哪些用户

(from u in entity.Users
[where not in results table..??]
select u); 

使用模拟对象的完整工作示例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {

            var usersTakenTest = new List<string>() { "Bob", "Jim", "Angel" };
            var allUsers = new List<string> { "Bob", "Jim", "Angel", "Mike", "JimBobHouse" };

            var users = from user in allUsers
                        join userTakenTest in usersTakenTest on user equals userTakenTest into tempUsers
                        from newUsers in tempUsers.DefaultIfEmpty()
                        where string.IsNullOrEmpty(newUsers)
                        select user;

            foreach (var user in users)
            {
                Console.WriteLine("This user has not taken their test: " + user);
            }
            Console.ReadLine();
        }
    }
}

.DefaultIfEmpty是您所追求的-如果它返回一个空结果,则表A中有一个对象,而表B中没有显示该对象。

这些对象是如何关联的?它们之间是有关系还是两个不相关的实体?您需要将外键上的两个表连接到主键。然后,您需要研究执行左联接和右联接,因为这将使您能够找到在一个表中而不是在另一个表中出现的结果。@PanagiotisKanavos是的,它们是相关的。结果表中有一列fk_user_id。这是pk_user_id上用户表的伪造密钥。我询问的是对象,而不是表。EF是一个ORM,任何关系都应该作为用户或中间类的属性出现。若用户有一个User.Results属性,你们可以检查它是否为空,效率极低