سؤال

لديّ A C#-4 MVC3 RC Application الذي يستخدم إطار الكيان 4.

لدي هذه الطريقة:

public static List<Content> FetchMenu(int websiteID) {
    return (from w in ContextHelper.Current.Websites
            where w.WebsiteID == websiteID
            select w.Contents).ToList();
}

الكائنات المعنية هنا (المحتوى والموقع) من النوع EntityObject.

تعطي الوظيفة أعلاه خطأ في التجميع:

Cannot implicitly convert type 'System.Linq.IQueryable<System.Collections.Generic.List<Manager.Models.Content>>' to 'System.Collections.Generic.List<Manager.Models.Content>'. An explicit conversion exists (are you missing a cast?)

W.Contents هو EntityCollection<Content> اكتب جمع.

كيف يمكنني تأجيل نوع linq.iqueryable لإرجاع قائمة عامة من محتوى النوع؟

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

المحلول

تحتاج إلى استخدام الأقواس ، بحيث تقدم ToList() إلى الاستعلام بأكمله (كائن من النوع IQueryable):

public static List<Content> FetchMenu(int websiteID) {
    return (from w in ContextHelper.Current.Websites
            where w.WebsiteID == websiteID
            select w.Contents).ToList();
}

وإلا فأنت تتصل ToList() تشغيل w.Contents فقط و select يتم تطبيقه بعد ذلك. قد يكون أكثر وضوحًا إذا أظهرت بناء جملة السلاسل.

الإصدار الخاص بك:

ContextHelper.
           Current.
           Websites.
           Where(w => w.WebsiteID == websiteID).
           Select(w => w.Contents.ToList());

الإصدار الصحيح:

ContextHelper.
           Current.
           Websites.
           Where(w => w.WebsiteID == websiteID).
           Select(w => w.Contents).
           ToList();

تعديل:

حيث w.Contents هي مجموعة ، تحتاج إلى تسويتها باستخدام SelectMany:

public static List<Content> FetchMenu(int websiteID) {
    return ContextHelper.
           Current.
           Websites.
           Where(w => w.WebsiteID == websiteID).
           SelectMany(w => w.Contents).
           ToList();
}

نصائح أخرى

    var query = (from w in ContextHelper.Current.Websites
                 where w.WebsiteID == websiteID
                 select w.Contents).First();

    return query.ToList();

يبدو أن.

إجابة Yakimych استخدام SelectMany() هو كوريت. من أجل الاكتمال ، هنا يستخدم بناء جملة "Query Command":

public static List<Content> FetchMenu(int websiteID) {
    return (from w in ContextHelper.Current.Websites
            where w.WebsiteID == websiteID
            from c in w.Contents
            select c).ToList();
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top