كيف يمكنني فقط الانضمام إلى () لربط اثنين من المواد الغذائية؟
-
28-09-2019 - |
سؤال
لدي اثنين من المواد الغريبة:
المكونات:
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;
}
لا تنتمي إلى StackOverflow