سؤال

ولدي 3 الجداول. 2 تحتوي على قوائم الملفات التي لست بحاجة للقيام UNION على الحصول على كافة الملفات فريدة من نوعها، ثم أريد القيام به صلة خارجية يسرى الانضمام مقابل الجدول 3RD للعثور على كافة الملفات الموجودة في الجدول 3RD فقط وليس في الآخر 2.

لقيام UNION لدي ما يلي:

var imageUnion = (from img in dc.ImageT1
                  select img.filename).Union(
                  from img in dc.ImageT2
                  select img.filename);

والآن، للحصول على الملفات فقط في الجدول 3RD أود أن تفعل صلة خارجية يسرى الانضمام على هذا النحو:

var query = from image in dc.ImageT1
            join active in dc.ActiveImages on image.filename equals 
            active.filename into gj
            from subimage in gj.DefaultIfEmpty()
            where subimage.filename == null
            select new { image.filename, image.size };  

وأنا أفهم كيفية القيام الخارجي الأيسر الانضمام ببساطة ضد طاولة واحدة، ولكن كيف يمكنني الحصول على مجموعة النتائج من الاستعلام الأول لي في الخارجية اليسرى الانضمام؟ في الأساس، بدلا من القيام الخارجي الأيسر الانضمام ضد ImagesT1 أريد أن نفعل ذلك ضد نتيجة imageUnion.

وشكرا!

هل كانت مفيدة؟

المحلول

وتحتاج إلى تحديد أكثر من عقار واحد في الاتحاد الخاص بك؛ النتيجة الحالية هي IEnumerable <سلسلة> (على افتراض اسم الملف الخاص بك هو سلسلة).

var imageUnion = (from img in dc.ImageT1
                  select new { Filename = img.filename, Size = img.size }).Union(
                  from img in dc.ImageT2
                  select new { Filename = img.filename, Size = img.size });

وبعد ذلك يجب أن تكون قادرا على استخدامها في الاستعلام الثاني ليحل محل dc.ImageT1.

وعلى الرغم من أن التفكير أكثر على ذلك، فإن الاتحاد قد لا تعمل مع 2 أنواع من مجهول، لدعم ذلك، وربما انها تريد ان يكون من المفيد تحديد الفئة التي ليس لديها سوى اسم الملف والحجم؟

public class TempImage
{
    public string Filename { get; set; }
    public int Size { get; set; }
}

var imageUnion = (from img in dc.ImageT1
                  select new TempImage() { Filename = img.filename, Size = img.size }).Union(
                  from img in dc.ImageT2
                  select new TempImage() { Filename = img.filename, Size = img.size });

نصائح أخرى

ويجب أن تكون قادرا على تحديد من الاستعلام الأول بدلا من الجدول الصورة مرة أخرى. شيء من هذا القبيل:

var query = from image in imageUnion
            join active in dc.ActiveImages on image.filename equals 
            active.filename into gj
            from subimage in gj.DefaultIfEmpty()
            where subimage.filename == null
            select new { image.filename, image.size };

وتحرير: أنت أيضا لديك لتحرير الاستعلام imageUnion لتحديد حجم وكذلك اسم (وأية أعمدة أخرى تحتاج في الاستعلام النهائي)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top