2015-04-04 101 views
-1

我有一个linq查询返回未知类型值的列表。我想包括在此方法查询和使用方法返回未知类型列表的方法

public __________ getResult() { 
var result = from ps in _context.PurchasingShipments 
        group ps by ps.date.Value.Year into grp 
        select new 
        { 
         Year = grp.Key, 
         Cost = grp.Sum(x => x.NoOfPieces * x.PricePerPiece + x.Micelleneous + x.TransportCost + x.SupplierCommission) 
        }; 

     return result; 

}

以上是一个例子,应该是什么的getResult方法的返回类型得到的结果?请帮助

+0

您正在'select'语句中创建一个匿名类型,因此'result'将是匿名类型的枚举类型。唯一能够返回的方式是'IEnumerable ',但如果你这样做,你将如何在getResult方法外使用它?你最好创建一个包含两个字段的特定结果类型(类)。 – Alex 2015-04-04 05:35:38

回答

2

解决方案1:强烈建议您创建一个包含你的属性模型,并返回一个列表模型。

public class CostYearModel { 
    public int Year { get; set; } 
    public int Cost { get; set; } 
} 

的方法会像下面

public List<CostYearModel> getResult() { 
    var result = from ps in _context.PurchasingShipments 
       group ps by ps.date.Value.Year into grp 
       select new CostYearModel 
       { 
        Year = grp.Key, 
        Cost = grp.Sum(x => x.NoOfPieces * x.PricePerPiece + x.Micelleneous + x.TransportCost + x.SupplierCommission) 
       }; 

     return result.ToList(); 
} 

解决方案2:如果不能和/或不愿意为此创建模型,不好的解决方案将返回一个对象列表。您可以通过反射访问值。

public List<Object> getResult() { 
    var result = from ps in _context.PurchasingShipments 
       group ps by ps.date.Value.Year into grp 
       select (new 
       { 
        Year = grp.Key, 
        Cost = grp.Sum(x => x.NoOfPieces * x.PricePerPiece + x.Micelleneous + x.TransportCost + x.SupplierCommission) 
       } as Object); 

    return result.ToList(); 
} 

访问每个属性的值(在您的案例中的成本和年份)的代码如下所示。

foreach (var costYear in result) 
{ 
    var properties = costYear.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance); 
    foreach (var property in properties) 
    { 
     var value = property.GetValue(costYear, null); 
    } 
} 
1

只能返回对象,你应该创建一个类:

public class CostYearModel{ 
    public int Year {get; set;} 
    public int Cost {get; set;} 
} 
public List<CostYearModel> getResult() { 
    var result = from ps in _context.PurchasingShipments 
         group ps by ps.date.Value.Year into grp 
         select new CostYearModel 
         { 
          Year = grp.Key, 
          Cost = grp.Sum(x => x.NoOfPieces * x.PricePerPiece + x.Micelleneous + x.TransportCost + x.SupplierCommission) 
         }; 

     return result.ToList(); 
} 
+1

您可能希望将'CustomClass'更改为'CostYearModel' – Alex 2015-04-04 05:37:39