PDA

View Full Version : BUG در LINQ!!????



mn_zandy63
چهارشنبه 17 تیر 1388, 11:58 صبح
من مشکلی در یک کوئری لینک پیدا کردم، نمیتونم درک کنم که چرا به این شکله، آیا کسی میدونه چیه قضیه؟
فرض کنیم دو جدول به نام های TEACHER و STUDENT به عنوان مثال، داشته باشیم، که چنین ارتباطی بین آنها برقرار باشد: STUDENT.TeacherID = TEACHER.ID.
فرض کنیم، متغیر db یک اینستنس از DataContext ما باشد.
حالت های زیر ایرادی ندارند:

var students = from t in db.TEACHERS
from s in t.STUDENTS
select s;
var teachers = from s in students
select s.TEACHER;
در این حالت بدون هیچ گونه مشکلی LINQ یک کوئری درست خروجی میدهد.
بحث منطق قضیه نیست، بحث اینه که کوئری ای که باید خروجی بده، خروجی میده.

در حالت زیر نیز مشکلی وجود ندارد.
-------------------------------------------
var students = db.STUDENTS;
var m1 = students;
var m2 = students;
var m3 = m1.union(m2);
var teachers = from s in m3
select s.TEACHER;
باز هم بدون هیچ مشکلی یک کوئری خروجی داده میشود.

حالا اگه دو حالت بالا ترکیب شوند مشکل بوجود میاد.
یعنی:
var students = from t in db.TEACHERS
from s in t.STUDENTS
select s;
var m1 = students;
var m2 = students;
var m3 = m1.union(m2);
var teachers = from s in m3
select s.TEACHER;
در این حالت مشکل بوجود میاد، و در کوئری ساخته شده، SELECT NULL AS EMPTY ...... میاد.
در واقع خروجی لیستی از NULL هاست.

نکته، این که نوشتم خلاصه شدهء اتفاقی است که در یک کوئری پیچیده، اتفاق افتاده است، گشتم تا متوجه شدم ایراد در Union و اون from هست.

یعنی دقیقاً ایراد زمانی بوجود میاد که هم union داشته باشیم، و هم لیست students به هر طریقی از ارتباط با Teacher به دست آمده باشد.

mn_zandy63
پنج شنبه 18 تیر 1388, 19:03 عصر
کسی نیست جواب بده؟