سؤال

ولدي بعض رمز ينق، أن يعمل بشكل جيد. فإنه يسترد قائمة المشاركات التي أمر بها مجلس آخرها.

والصيد هنا هو النظام من قبل ... انها أوامر من تعليقات أحدث. حتى إذا كان آخر مجلس فقط حصلت على التعليق، فإنه سوف يصل إلى أعلى القائمة (أي آخرها).

وkewl ... ولكن ماذا عن المشاركات متن الجديدة التي حصلت للتو على خلق؟ تم سردها أسفل القاع، لأن لديهم NO تعليقات :( انها مثل أريد أن أقول " النظام من قبل معظم التعليقات الأخيرة .. ولكن إذا كان قد تضطر أي تعليق، ثم من خلال مشاركة منتداك تاريخ إنشاء) ".

وهنا قال لي ينق ...

boardPostList = (from bp in db.tblBoardPosts.Where(whereClause)
    orderby (from bc in bp.tblBoardComments
    orderby bc.DateModified descending
    select bc.DateModified).First() descending
    select bp).ToPagedList(pageNumber, numberOfResults);

هل لديها أي اقتراحات؟

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

المحلول

هل هناك أي سبب لا يمكنك تحديث حقل في tblBoardPosts كلما يتم نشر تعليق على ذلك؟ الحفاظ على "نشر أو التعليق الأخير" تاريخ، ثم كنت قد حصلت على كثير الاستعلام أكثر بساطة، واحد والتي لا تحتاج إلى مسح كل تعليق في النظام للعمل على ما يجب القيام به.

وأما وقد قلت ذلك، هذا الاستعلام <م> قد العمل، إذا كان حقل DateModified الخاص بك هو قيم الفارغة:

boardPostList = (from bp in db.tblBoardPosts.Where(whereClause)
    orderby ((from bc in bp.tblBoardComments
    orderby bc.DateModified descending
    select bc.DateModified).FirstOrDefault() ?? bp.DateModified) descending
    select bp).ToPagedList(pageNumber, numberOfResults);

إذا كان مجرد عمود DateTime على التوالي، نتيجة FirstOrDefault لا تزال DateTime التي من شأنها أن تكون غير قيم الفارغة ... هل يمكن أن تحاول:

boardPostList = (from bp in db.tblBoardPosts.Where(whereClause)
    let lastComment = bp.tblBoardComments
                        .OrderByDescending(bc => bc.DateModified)
                        .FirstOrDefault()
    let lastModified = (lastComment == null 
                        ? bp.DateModified 
                        : lastComment.DateModified) 
    orderby lastModified descending
    select bp).ToPagedList(pageNumber, numberOfResults);

وانها بشعة جدا على الرغم من، وربما لا تترجم إلى SQL بشكل صحيح. أنا بالتأكيد محاولة لتغيير نظام حيث المنصب ذاته تحافظ على مسارها من ذلك.

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