1

私は2つのテーブルを持っています。1 つのユーザーテーブルと、特定のテストの結果が配置される 1 つのテーブル。

ユーザーがテストを受けると、結果と user_id が結果テーブルに配置されます。ユーザーが一度もテストを受けていない場合、明らかにそのユーザーの user_id は結果テーブルに含まれません。

結果テーブルにないすべてのユーザーを取得する必要があります。1回のクエリでこれを行う方法はありますか? (エンティティ フレームワーク)

すべてのユーザーを取得するのは簡単です。しかし今、結果セットに必要なユーザーを確認するために、それを結果テーブルにリンクする方法が必要です。

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

1 に答える 1

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() はあなたが求めているものです - 空の結果が返された場合、テーブル B には表示されないオブジェクトがテーブル A にあります。

于 2012-06-07T09:07:28.407 に答える