كيف يمكنني فقط الانضمام إلى () لربط اثنين من المواد الغذائية؟

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

سؤال

لدي اثنين من المواد الغريبة:

المكونات:

IngId
Description

متاح:

IngId

لدي بالفعل مكون من أجل المكونات:

var ingQuery = from i in context.Ingredients
               select i;

كيف يمكنني إضافة انضمام إلى مرشحاته AvailableIngredient (أي انضمام داخلي)؟ أعرف كيفية القيام بذلك إذا اضطررت إلى الانضمام طوال الوقت ، أي من ... الانضمام إلى السياق.

if (filterByAvailable)
{
   IQueryable<Available> availableQuery = GetAvailableIngredientQuery(context);
   ingQuery = ingQuery.Join(...); // Can I use this to join to the query?
}

قد لا تكون هذه هي الطريقة الصحيحة ، لذلك هذا ما أريد القيام به:

  • GetAvailivingEndientQuery يعيد استعلام المكونات المتاحة ، أي 3000 من 6000 (لكنه لا يعدد النتائج حتى الآن حيث يتم إرجاعه كإيكري من EF)
  • انضم إلى المتاحة إلى Ingquery ، لذلك هناك انضمام داخلي بين الاستعلامات

تعديل:

هذا هو الرمز الذي أستخدمه حاليًا (سريع جدًا) ، لكنه يعني الكود المكرر:

IQueryable<Ingredient> query;
if (filterByAvailable)
{
    IQueryable<Available> availableQuery = GetAvailableIngredientQuery(context);
    query = from item in context.Ingredients
               // Quite a few `where` clauses and stuff
            join t in availableQuery on item.IngId equals t.IngId
            select item;
}
else
{ 
    query = from item in context.Ingredients
               // The SAME `where` clauses and stuff as above
            select item;
}
هل كانت مفيدة؟

المحلول

استخدم الاستعلام الأول كمصدر للاستعلام اللاحق.

IQueryable<Ingredient> query = from item in context.Ingredients
                             // Quite a few `where` clauses and stuff
                               select item;

if (filterByAvailable)
{
    IQueryable<Available> availableQuery = GetAvailableIngredientQuery(context);
    query = from item in query
            join t in availableQuery on item.IngId equals t.IngId
            select item;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top