public void CovariantSubqueryTest() { IQueryable <object> subQueryable = (QuerySource.Select(c => c)).Distinct(); var queryExpression = ExpressionHelper.MakeExpression(() => ( from o in subQueryable select o)); var queryModel = QueryParser.GetParsedQuery(queryExpression); Assert.That(queryModel.GetOutputDataInfo().DataType, Is.SameAs(typeof(IQueryable <object>))); var subQuery = ((SubQueryExpression)queryModel.MainFromClause.FromExpression).QueryModel; var selectOutputInfo = subQuery.SelectClause.GetOutputDataInfo(); Assert.That(selectOutputInfo.ItemExpression.Type, Is.SameAs(typeof(Cook))); Assert.That(selectOutputInfo.ResultItemType, Is.SameAs(typeof(Cook))); Assert.That(selectOutputInfo.DataType, Is.SameAs(typeof(IQueryable <Cook>))); var distinctOperator = (DistinctResultOperator)subQuery.ResultOperators.Single(); var distinctOperatorOutputInfo = (StreamedSequenceInfo)distinctOperator.GetOutputDataInfo(selectOutputInfo); Assert.That(distinctOperatorOutputInfo.ItemExpression.Type, Is.SameAs(typeof(Cook))); Assert.That(distinctOperatorOutputInfo.ResultItemType, Is.SameAs(typeof(Cook))); Assert.That(distinctOperatorOutputInfo.DataType, Is.SameAs(typeof(IQueryable <Cook>))); var queryOutputInfo = (StreamedSequenceInfo)subQuery.GetOutputDataInfo(); Assert.That(queryOutputInfo.ItemExpression.Type, Is.SameAs(typeof(Cook))); Assert.That(queryOutputInfo.ResultItemType, Is.SameAs(typeof(Cook))); Assert.That(queryOutputInfo.DataType, Is.SameAs(typeof(IQueryable <Cook>))); }
public void DelegateAsSelector() { Func <Cook, string> expression = c => c.FirstName; var query = QuerySource.Select(c => c.Assistants.Select(expression)); QueryParser.GetParsedQuery(query.Expression); }
public void Transformation_ViaAttributedInstanceProperty() { var query = QuerySource.Select(c => c.WeightInLbs); var queryModel = QueryParser.GetParsedQuery(query.Expression); var selectClause = queryModel.SelectClause; CheckResolvedExpression <Cook, double> (selectClause.Selector, queryModel.MainFromClause, c => c.Weight * 2.20462262); }
public void Transformation_ViaAttributedInstanceMethod() { var query = QuerySource.Select(c => c.GetFullName()); var queryModel = QueryParser.GetParsedQuery(query.Expression); var selectClause = queryModel.SelectClause; CheckResolvedExpression <Cook, string> (selectClause.Selector, queryModel.MainFromClause, c => c.FirstName + " " + c.Name); }
public void Transformation_IntroducingSubQuery() { var query = QuerySource.Select(c => c.GetAssistantCount()); var queryModel = QueryParser.GetParsedQuery(query.Expression); var selectClause = queryModel.SelectClause; Assert.That(selectClause.Selector, Is.TypeOf <SubQueryExpression>()); var subQueryModel = ((SubQueryExpression)selectClause.Selector).QueryModel; CheckResolvedExpression <Cook, IQueryable <Cook> > (subQueryModel.MainFromClause.FromExpression, queryModel.MainFromClause, c => c.Assistants); Assert.That(subQueryModel.ResultOperators, Has.Some.TypeOf <CountResultOperator>()); }
public void Transformation_ViaAttributedIndexedProperty() { var query = QuerySource.Select(c => c[7]); var queryModel = QueryParser.GetParsedQuery(query.Expression); var selectClause = queryModel.SelectClause; Assert.That(selectClause.Selector, Is.TypeOf <SubQueryExpression>()); var subQueryModel = ((SubQueryExpression)selectClause.Selector).QueryModel; CheckResolvedExpression <Cook, IQueryable <Cook> > (subQueryModel.MainFromClause.FromExpression, queryModel.MainFromClause, c => c.Assistants); Assert.That(subQueryModel.ResultOperators[0], Is.TypeOf <TakeResultOperator> ()); Assert.That( ((TakeResultOperator)subQueryModel.ResultOperators[0]).Count, Is.InstanceOf <ConstantExpression>().With.Property("Value").EqualTo(7)); Assert.That(subQueryModel.ResultOperators[1], Is.TypeOf <FirstResultOperator>()); }