2016-08-25 5 views
0

ASP.NET MVC에는 두 가지 기능이 있습니다. 어떻게 이러한 함수를 일반 클래스 (클래스)로 변환합니까?일반 T 클래스를 만드는 방법은 무엇입니까?

public JsonResult CreateProduct(List<Product> Products, List<GroupExpression> GroupExpression) 
    { 
     List<GroupExpression> InvalidGroupExpression = ValidateColumnInList(Products, GroupExpression); 
     if (InvalidGroupExpression.Count() <= 0) 
     { 
      string[] Fields = GroupExpression.Select(x => x.ExpressionName).ToArray(); 
      var LambdaExp = GroupExpressionBuilder.GroupByExpression<Product>(Fields); 
      IEnumerable<Product> DuplicateProducts = Products.GroupBy(LambdaExp.Compile()).Where(g => g.Skip(1).Any()).SelectMany(g => g).ToList(); 
      IEnumerable<object> Indices = DuplicateProducts.Select<Product, object>(x => Products.IndexOf(x)).ToList(); 

      return Json(new { Success = true, Indices }, JsonRequestBehavior.AllowGet); 
     } 
     else 
     { 
      //return Json(new { Message = false }); 
      return Json(new { Success = false, InvalidGroupExpression }, JsonRequestBehavior.AllowGet); 
     }    
    } 
    public List<GroupExpression> ValidateColumnInList(List<Product> Products, List<GroupExpression> GroupExpression) 
    { 
     //bool IsValid = true; 
     List<GroupExpression> TempGroupExpression = new List<GroupExpression>(); 
     foreach (var GrpExpression in GroupExpression) 
     { 
      bool IsContainColumn = typeof(Product).GetProperties().Any(column => column.Name == GrpExpression.ExpressionName); 
      if (!IsContainColumn) 
      { 
       TempGroupExpression.Add(GrpExpression); 
       //IsValid = false; 
      } 
     } 
     //GroupExpression.RemoveAll(x => TempGroupExpression.Contains(x)); 
     //return IsValid; 
     return TempGroupExpression; 
    } 

상기 기능 중. List Products, List GroupExpression을 매개 변수로 변환하려고했습니다. 나는 T 수업이 처음이다. 어떻게해야합니까?

+0

클래스? 무엇을 성취하려고합니까? 그것은 당신이 무엇을 할 것인지 매우 불분명합니다. – Szer

답변

2

함수의 서명은 다음과 같습니다. 특정 상황에

public JsonResult CreateProduct<T>(List<T> Products, 
            List<GroupExpression> GroupExpression) 
{ 
} 

public List<T> ValidateColumnInList<T>(List<T> Products, 
             List<GroupExpression> GroupExpression) 
{ 
} 
+0

예, 물론 의견을 주셔서 감사합니다. – Codor

0

다음과 같은 것을 올려 거라고 :이 속성을 반복하고 당신은 유형을 사용하고 있기 때문에

class SomeClass 
{ 

    public void SomeMethod() 
    { 
     var groupExpressions = new List<GroupExpression>(); 
     // populate GroupExpressions somehow 
     var validatedGroups = ValidateColumnInList<Product, GroupExpression>(groupExpressions); 
    } 

    public List<TGroup> ValidateColumnInList<TItem, TGroup>(List<TGroup> GroupExpression) where TGroup: GroupExpression 
    { 
     List<TGroup> TempGroupExpression = new List<TGroup>(); 
     var itemProperties = typeof(TItem).GetProperties(); 
     foreach (var GrpExpression in GroupExpression) 
     { 
      bool IsContainColumn = itemProperties.Any(column => column.Name == GrpExpression.ExpressionName); 
      if (!IsContainColumn) 
      { 
       TempGroupExpression.Add(GrpExpression); 
      } 
     } 
     return TempGroupExpression; 
    } 

    public JsonResult CreateProduct<TItem, TGroup>(List<TItem> Products, List<TGroup> GroupExpression) where TGroup : GroupExpression 
    { 
     List<TGroup> InvalidGroupExpression = ValidateColumnInList<TItem, TGroup>(GroupExpression); 
     if (InvalidGroupExpression.Count() <= 0) 
     { 
      string[] Fields = GroupExpression.Select(x => x.ExpressionName).ToArray(); 
      var LambdaExp = GroupExpressionBuilder.GroupByExpression<TItem>(Fields); 
      IEnumerable<TItem> DuplicateProducts = Products.GroupBy(LambdaExp.Compile()).Where(g => g.Skip(1).Any()).SelectMany(g => g).ToList(); 
      IEnumerable<object> Indices = DuplicateProducts.Select<TItem, object>(x => Products.IndexOf(x)).ToList(); 

      return Json(new { Success = true, Indices }, JsonRequestBehavior.AllowGet); 
     } 
     else 
     { 
      //return Json(new { Message = false }); 
      return Json(new { Success = false, InvalidGroupExpression }, JsonRequestBehavior.AllowGet); 
     } 
    } 

} 

internal class Product 
{ 
} 

internal class GroupExpression 
{ 
    public string ExpressionName; 
} 

내가 방법 PARAMS에서 List<TItem> items을 제거 그것이 유효한지 여부와 일치시키기 위해 그것을 사용합니다.

관련 문제