যে কোনও ক্ষেত্রে ADO.NET সত্তা ফ্রেমওয়ার্ক ব্যবহার করা হচ্ছে , ইকোস্টোর্মের সমাধানও পুরোপুরি কার্যকরভাবে কাজ করে। তবে আমার মাথাটি চারপাশে মুড়ে নিতে কয়েক মিনিট সময় লাগল। ধরে নিই আপনার কাছে একটি ডাটাবেস প্রসঙ্গ আছে, ডিসি, এবং টেবিলের সাথে সারণি x সারণি x এ সংযুক্ত নয় সন্ধান করতে চান, সম্পূর্ণ উত্তরের উত্তরটি দেখে মনে হচ্ছে:
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);
অ্যান্ডির মন্তব্যের জবাবে, হ্যাঁ, একটি লিনকুই ক্যোয়ারিতে একজনের কাছ থেকে দু'জন থাকতে পারে। তালিকাগুলি ব্যবহার করে এখানে একটি সম্পূর্ণ কাজের উদাহরণ। প্রতিটি ক্লাস, ফু এবং বারের একটি আইডি থাকে। Foo.BarId এর মাধ্যমে বারের কাছে ফু'র একটি "বিদেশী কী" উল্লেখ রয়েছে। প্রোগ্রামটি সমস্ত ফুগুলি সম্পর্কিত বারের সাথে লিঙ্কযুক্ত না বাছাই করে।
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; }
}