Trong trường hợp một người đang sử dụng Khung thực thể ADO.NET , giải pháp của EchoStorm cũng hoạt động hoàn hảo. Nhưng tôi phải mất vài phút để quấn đầu quanh nó. Giả sử bạn có bối cảnh cơ sở dữ liệu, dc và muốn tìm các hàng trong bảng x không được liên kết trong bảng y, câu trả lời hoàn chỉnh sẽ giống như:
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);
Đáp lại bình luận của Andy, vâng, người ta có thể có hai từ trong truy vấn LINQ. Đây là một ví dụ hoạt động hoàn chỉnh, sử dụng danh sách. Mỗi lớp, Foo và Bar, có một Id. Foo có một tham chiếu "khóa ngoại" đến Bar thông qua Foo.BarId. Chương trình chọn tất cả các Foo không được liên kết với một Thanh tương ứng.
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; }
}