2015-04-04 3 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

ответ

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

Смежные вопросы