Код: Выделить всё
var lstNums = new List { 100, 101 };
var getAll = new StudentRepository().GetAll(); // returns IQueryable
var query = getAll.Join(lstNums, a => a.StudentId, b => b, (a, b) => a).ToList();
- LstNums может представлять собой список любых примитивных типов данных.
- GetAll содержит IQueryable, это может быть IQueryable любого объекта
- Запрос будет содержать List записей после объединения с getAll и списком целых чисел. Но результатом может быть любой список сущностей. Список, то есть lstNum, может быть любым списком примитивных типов данных.
Код: Выделить всё
public static IQueryable JoinQuery(this IQueryable outer, IEnumerable innerEntities, string firstEntityPropName,
Type typeSecondEntity, Type typeResultEntity, params object[] values)
{
LambdaExpression outerSelectorLambda = DynamicLinq.DynamicExpression.ParseLambda(outer.ElementType, null, firstEntityPropName, values);
ParameterExpression expnInput = Expression.Parameter(typeSecondEntity, "inner");
ParameterExpression expnResult = Expression.Parameter(typeResultEntity, "outer");
return outer.Provider.CreateQuery(
Expression.Call(
typeof(Queryable), "Join",
new Type[] { outer.ElementType, innerEntities.AsQueryable().ElementType, outerSelectorLambda.Body.Type, expnResult.Type },
outer.Expression, innerEntities.AsQueryable().Expression, Expression.Quote(outerSelectorLambda), expnInput,
expnResult));
}
Код: Выделить всё
public static IQueryable JoinQuery(this IQueryable outer, IEnumerable innerEntities, string firstEntityPropName, Type typeSecondEntity, Type typeResultEntity, params object[] values)
{
return (IQueryable)Extensions.JoinQuery((IQueryable)outer, (IEnumerable)innerEntities, firstEntityPropName, typeSecondEntity, typeResultEntity, values);
}
Подробнее здесь: https://stackoverflow.com/questions/539 ... ssion-in-c