Tôi có hai IQueryables:Làm thế nào để tôi chỉ LINQ Join() để liên kết hai IQueryables?
Ingredient:
IngId
Description
AvailableIngredient:
IngId
Tôi đã có một IQueryable cho Ingredient:
var ingQuery = from i in context.Ingredients
select i;
Làm cách nào để tôi có thể thêm tham gia vào bộ lọc của mình để nó lọc theo AvailableIngredient
(tức là một bên trong tham gia)? Tôi biết làm thế nào để làm điều đó nếu tôi phải tham gia tất cả các thời gian, tức là từ ... tham gia context.Available ... vv), nhưng Tham gia là có điều kiện, vì vậy tôi cần phải sử dụng cú pháp khác:
if (filterByAvailable)
{
IQueryable<Available> availableQuery = GetAvailableIngredientQuery(context);
ingQuery = ingQuery.Join(...); // Can I use this to join to the query?
}
điều này có thể không phải là phương pháp đúng, vì vậy đây là những gì tôi muốn làm:
- GetAvailableIngredientQuery trả các thành phần sẵn truy vấn, tức là 3000 của 6000 (nhưng nó không liệt kê các kết quả chưa như nó là được trả lại dưới dạng IQueryable từ EF)
- Tham gia vào availableQuery đến ingQuery, do đó một Inner Tham gia giữa hai truy vấn
EDIT:
này được mã Tôi hiện đang sử dụng (rất nhanh), nhưng nó có nghĩa là mã trùng lặp :
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;
}
Đó là những gì tôi đã có. Đọc bản chỉnh sửa của tôi (được đưa ra trước câu trả lời của bạn) và nó gây ra rất nhiều sự trùng lặp. Ngoài ra, đó là cú pháp không hợp lệ. Bạn không thể sử dụng '==' nó phải là 'bằng'. Dù sao cũng cảm ơn bạn. – GenericTypeTea
Thử giải pháp mới. Phải đã bỏ lỡ chỉnh sửa trước đó của bạn ... – Clicktricity
Cảm ơn, chắc chắn có vẻ như nó sẽ làm việc (Tôi không biết tại sao tôi đã thử này)! Thật không may tôi đang ở trong một trạng thái hoàn toàn không thể xây dựng vào lúc này, vì vậy tôi sẽ cố gắng trong một chút. – GenericTypeTea