سؤال

وأنا أعلم ما يلي ممكن مع linq2db4o

from Apple a in db
where a.Color.Equals(Colors.Green)
select a

وماذا ولكن أنا بحاجة إلى شيء يتيح لي الفرصة لبناء الاستعلام بلدي مشروط (مثل أستطيع في المتغيرات LINQ أخرى)

public IEnumerable<Apple> SearchApples (AppleSearchbag bag){
    var q = db.Apples;
    if(bag.Color != null){
        q = q.Where(a=>a.Color.Equals(bag.Color));
    }
    return q.AsEnumerable();
}

في وضع العالم الحقيقي سوف searchbag عقد العديد من الخصائص وبناء عملاق إذا شجرة التي يمسك كل مزيج ممكن من شغلها في خصائص سيكون عمل مجنون ل.

ومن الممكن أن المكالمة الأولى

var q = (from Color c in db select c);

ومن ثم الاستمرار من هناك. ولكن هذا ليس بالضبط ما كنت أبحث عنه.

تنويه: قرب مكررة من سؤالي ما يقرب من 11 شهرا مضت.
هذا واحد قليلا أكثر وضوحا كما فهمت الأمر بشكل أفضل الآن وآمل من الآن بعض من عيون db4o ديف يمكن التقاط هذا على هذا:

وأي اقتراحات؟

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

المحلول

ونعم انها بالتأكيد من الممكن أن يؤلف الاستفسارات LINQ الأمثل باستخدام db4o. المسلم به أن يعرف ديسيبل كما يلي:

IObjectContainer db;

وهنا هو الاستعلام الخاص بك:

public IEnumerable<Apple> SearchApples (AppleSearchbag bag)
{
    var query = db.Cast<Apple> ();
    // query will be a Db4objects.Db4o.Linq.IDb4oLinqQuery<Apple>
    if (bag.Color != null)
        query = query.Where (a => a.Color == bag.Color);

    return query;
}

في هذه الحالة، سيتم تنفيذ الاستعلام كلما يتم كرر عاد enumerable انتهى.

والاحتمال الآخر هو أن استخدام آلية IQueryable، التي لديها ميزة كونها معترف بها على نحو أفضل من قبل المطورين:

public IQueryable<Apple> SearchApples (AppleSearchbag bag)
{
    var query = db.AsQueryable<Apple> ();
    // query will be a System.Linq.IQueryble<Apple>
    if (bag.Color != null)
        query = query.Where (a => a.Color == bag.Color);

    return query;
}

في كلتا الحالتين، سوف db4o محاولة للاستدلال استعلام الأمثل من التعبير امدا عند التنفيذ، وإذا فشلت، فإن نظام الاستعاضة إلى LINQ إلى الكائنات. أول واحد لديه ميزة كونها أكثر مباشرة، عن طريق تجنب queryable إلى LINQ إلى db4o التحول.

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