获取所有用户,只有当他们没有出现在另一个表中时

时间:2012-06-07 08:31:51

标签: c# entity-framework

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

当用户进行测试时,他的结果和他的user_id被放在 results 表中。当用户从未参加测试时,显然他的user_id不会出现在结果表中。

我需要获取不在结果表中的所有用户。有没有办法在一个查询中执行此操作? (实体框架)

获得所有用户很容易。但现在我需要一种方法将它链接到 results 表,以查看我在结果集中想要的用户。

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

1 个答案:

答案 0 :(得分:2)

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

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中显示的对象。