2016-08-25 3 views
0

ASP.NET MVCには2つの機能があります。これらの関数をGenericクラス(クラス)に変換するにはどうすればよいですか?ジェネリック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を削除し、検証する必要があるかどうかを照合します。

関連する問題