لا يمكن لملحقات Lambda Lambda استخدام أي استعلام الاسم المستعار على DetachedCriteria

StackOverflow https://stackoverflow.com/questions/2449010

سؤال

أحاول كتابة استعلام بسيط يتطلب اسم مستعار لأن الكثير من المتصلات العديدة ولكن لا يمكنني الحصول عليها للعمل مع ملحقات NH Lambda. يعطيني دائما خطأ في الترجمة على الرغم من بقدر ما أستطيع أن أخبره بالضبط هو نفسه الوثائق وجميع الأمثلة التي رأيتها عبر الإنترنت.

ويعمل

var query = DetachedCriteria.For<County>()            
    .CreateCriteria("Zips", "zipAlias", JoinType.LeftOuterJoin)
    //.CreateCriteria<County>(x => x.Zips, 
    //                              () => zipAlias, JoinType.LeftOuterJoin)
    .Add<Zip>(zip => zip.ZipCode == zipCode);

لا يعمل

var query = DetachedCriteria.For<County>()            
    //.CreateCriteria("Zips", "zipAlias", JoinType.LeftOuterJoin)
    .CreateCriteria<County>(x => x.Zips, 
                                    () => zipAlias, JoinType.LeftOuterJoin)
    .Add<Zip>(zip => zip.ZipCode == zipCode);

النتائج في بناء Error 22 The name 'zipAlias' does not exist in the current context

IntelliSense يسلط الضوء أيضا على مقر المحترم **<County>** قائلة إنها لا تفهم الطريقة ولكنها لا تظهر لي بشكل صحيح أسماء المعلمات عندما أكون داخل الكنيسة.

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

المحلول

ال توثيق مليء بالأمثلة المفيدة.

لك zipAlias يحتاج إلى أن يكون متغير في النطاق المحلي.

Zip zipAlias = null;
string zipCode = "";

var query = DetachedCriteria.For<County>()
    .CreateCriteria<County>(x => x.Zips, () => zipAlias, JoinType.LeftOuterJoin)
    .Add<Zip>(zip => zip.ZipCode == zipCode);

كتنزيل ارتباط الوثائق بدلا من التقديم، قمت بنسخ بعض الأقسام.

إنشاء جمعية المعايير مع الاسم المستعار
باستخدام ICRITERIA API الأصلي:

ICriteria before = CreateSession()
    .CreateCriteria(typeof(Person))
        .CreateCriteria("Children", "childAlias")
            .Add(Restrictions.Eq("Nickname", "test"));

باستخدام Exhibernate Lambda Extensions:

Child childAlias = null;
ICriteria after = CreateSession()
    .CreateCriteria(typeof(Person))
        .CreateCriteria((Person p) => p.Children, () => childAlias)
            .Add<Child>(c => c.Nickname == "test");

إنشاء جمعية الاسم المستعار المعايير مع الاسم المستعار والانضمام
باستخدام ICRITERIA API الأصلي:

ICriteria before = CreateSession()
    .CreateCriteria(typeof(Person), "personAlias")
        .CreateCriteria("personAlias.Children", "childAlias", JoinType.LeftOuterJoin)
            .Add(Restrictions.Eq("Nickname", "test"));

باستخدام Exhibernate Lambda Extensions:

Person personAlias = null;
Child childAlias = null;
ICriteria after = CreateSession()
    .CreateCriteria(typeof(Person), () => personAlias)
        .CreateCriteria(() => personAlias.Children, () => childAlias, JoinType.LeftOuterJoin)
            .Add<Child>(c => c.Nickname == "test");

إنشاء جمعية معايير مع الاسم المستعار والانضمام
باستخدام ICRITERIA API الأصلي:

DetachedCriteria before =
    DetachedCriteria.For<Person>()
        .CreateCriteria("Children", "childAlias", JoinType.LeftOuterJoin)
            .Add(Restrictions.Eq("Nickname", "test"));

باستخدام Exhibernate Lambda Extensions:

Child childAlias = null;
DetachedCriteria after =
    DetachedCriteria.For<Person>()
        .CreateCriteria((Person p) => p.Children, () => childAlias, JoinType.LeftOuterJoin)
            .Add<Child>(c => c.Nickname == "test");
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top