0

次のような関係を持つ 3 つのテーブル ( Person_tblPersonH​​obbies_tbl、およびHobbies_tbl ) があるとします。

Person_tbl [1]-------[n] PersonHobbies_tbl [n]-------[1] Hobbies_tbl

ロジックは、特定の人がより多くの趣味を持つことができるということです。ID で表される特定の人に割り当てられていない趣味のリストを取得したいと考えています。

たとえば、特定の人に割り当てられている趣味のリストを取得したい場合は、次のように実行できます。

DBEntity db = new DBEntity();

var Person = db.Person_tbl.Find(id); //id contains the ID of a person
var obj = Person.PersonHobbies_tbl;

//lets say that ViewListResult cointains only HobbyName
return obj.Select(n => new ViewListResult   
{
    HobbyName= n.Hobbies_tbl.name
}).ToList();

これの反対(残りの趣味のリスト)を効率的に取得したい。

だから私の質問は、どうすれば十分に効率的な方法で問題を解決できるでしょうか?

4

2 に答える 2

1

必要なものを取得するための簡単な linqpad テスト。

void Main()
{
    var hobbies = new List<Hobby>()
    {
        new Hobby { ID = 1, Name = "Test 1" },
        new Hobby { ID = 2, Name = "Test 2" },
        new Hobby { ID = 3, Name = "Test 3" },
        new Hobby { ID = 4, Name = "Test 4" }
    };

    var ids = new[] { 2, 3 };

    var rest = hobbies.Where(x => !ids.Contains(x.ID)).ToList();
    rest.Dump();
}

public class Hobby
{
    public int ID { get; set; }
    public string Name { get; set; }
}


ID  Name
1   Test 1 
4   Test 4 
于 2015-09-18T12:15:54.233 に答える