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