Jika seseorang menggunakan ADO.NET Entity Framework , solusi EchoStorm juga berfungsi dengan baik. Tapi aku butuh beberapa menit untuk melilitkan kepalaku. Dengan asumsi Anda memiliki konteks basis data, dc, dan ingin menemukan baris dalam tabel x tidak tertaut pada tabel y, jawaban jawaban lengkapnya tampak seperti:
var linked =
from x in dc.X
from y in dc.Y
where x.MyProperty == y.MyProperty
select x;
var notLinked =
dc.X.Except(linked);
Menanggapi komentar Andy, ya, seseorang dapat memiliki dua dari dalam kueri LINQ. Ini contoh kerja yang lengkap, menggunakan daftar. Setiap kelas, Foo and Bar, memiliki ID. Foo memiliki referensi "kunci asing" ke Bar melalui Foo.BarId. Program memilih semua Foo yang tidak ditautkan ke Bar yang sesuai.
class Program
{
static void Main(string[] args)
{
// Creates some foos
List<Foo> fooList = new List<Foo>();
fooList.Add(new Foo { Id = 1, BarId = 11 });
fooList.Add(new Foo { Id = 2, BarId = 12 });
fooList.Add(new Foo { Id = 3, BarId = 13 });
fooList.Add(new Foo { Id = 4, BarId = 14 });
fooList.Add(new Foo { Id = 5, BarId = -1 });
fooList.Add(new Foo { Id = 6, BarId = -1 });
fooList.Add(new Foo { Id = 7, BarId = -1 });
// Create some bars
List<Bar> barList = new List<Bar>();
barList.Add(new Bar { Id = 11 });
barList.Add(new Bar { Id = 12 });
barList.Add(new Bar { Id = 13 });
barList.Add(new Bar { Id = 14 });
barList.Add(new Bar { Id = 15 });
barList.Add(new Bar { Id = 16 });
barList.Add(new Bar { Id = 17 });
var linked = from foo in fooList
from bar in barList
where foo.BarId == bar.Id
select foo;
var notLinked = fooList.Except(linked);
foreach (Foo item in notLinked)
{
Console.WriteLine(
String.Format(
"Foo.Id: {0} | Bar.Id: {1}",
item.Id, item.BarId));
}
Console.WriteLine("Any key to continue...");
Console.ReadKey();
}
}
class Foo
{
public int Id { get; set; }
public int BarId { get; set; }
}
class Bar
{
public int Id { get; set; }
}