/// <summary> /// 按关联对象选择查询字段 /// 可多次调用,不要重复 /// </summary> /// <param name="resultSelector"></param> /// <returns></returns> public LambdaQueryJoin <T, TJoin> Select <TResult>(Expression <Func <T, TJoin, TResult> > resultSelector) { //在关联两次以上,可调用以下方法指定关联对象获取对应的字段 var parameters = resultSelector.Parameters.Select(b => b.Type).ToArray(); var selectFieldItem = BaseQuery.GetSelectField(true, resultSelector.Body, false, parameters); //BaseQuery.__QueryFields.AddRange(resultFields); //selectFieldItem.queryFieldString = ""; //re BaseQuery.SetSelectFiled(selectFieldItem); return(this); }
/// <summary> /// 返回强类型结果选择 /// </summary> /// <param name="resultSelector"></param> /// <returns></returns> public ILambdaQueryResultSelect <TJoinResult2> Select <TJoinResult2>(Expression <Func <T, TJoinResult, TJoinResult2> > resultSelector) where TJoinResult2 : class { var parameters = resultSelector.Parameters.Select(b => b.Type).ToArray(); var selectField = BaseQuery.GetSelectField(true, resultSelector.Body, false, parameters); var resultFields = selectField.mapping; var prefix1 = BaseQuery.GetPrefix(typeof(TJoinResult)); var prefix2 = BaseQuery.GetPrefix(resultSelect.InnerType); //替换匿名前辍 foreach (var item in resultFields) { if (item.QueryFull.Contains(prefix1)) { item.QueryFull = item.QueryFull.Replace(prefix1, prefix2); } } BaseQuery.SetSelectFiled(selectField); return(new LambdaQueryResultSelect <TJoinResult2>(BaseQuery, resultSelector.Body)); }