我在Domain.Services项目中有以下方法
public IList GetGroupProduct(IPrincipal user, int year)
{
if (user == null)
{
throw new ArgumentException("user");
}
var query = (from p in _repository.GetRevenues()
join o in _repository.GetEquipments() on p.IdEquipment.Equipment_Id equals
o.Equipment_Id
join c in _repository.GetGroupEquipment() on o.IdGroup.Group_Id equals
c.Group_Id
where p.DateTimeCreationData.Year == year
orderby p.DateTimeCreationData
select new
{
p.Quantity,
p.Value,
c.NameGroup
}).ToList();
return query;
}
在我的视图中,我致电
var listGroupProductsActualYear = receitaServico.GetGroupProduct(User, DateTime.Now.Year);
这样做很好,但是通过结果太难了。我不知道最好的方法是否应该返回IList或其他类型。
如何在此GetGrupoProduto方法返回的变量中执行foreach
?
或者我怎样才能做出更好的方法,也许不使用IList。
我返回类型
的另一种方法 public IEnumerable<Revenue.Revenue> GetRevenues(IPrincipal user, int year)
{
if (user == null)
{
throw new ArgumentException("user");
}
return from p in _repository.GetRevenues()
where p.DateTimeCreationData.Year == year
orderby p.DateTimeCreationData
select p;
}
答案 0 :(得分:0)
您可以使用dynamic
功能
foreach(dynamic item in listaGruposProdutosAnoAtual)
{
var quantity = item.Quantidade;
}
但我强烈建议您使用命名类型而不是匿名类型,因为这种方式不是类型安全的。
答案 1 :(得分:0)
如果您不想使用非泛型集合类型或接口(在大多数情况下,您不想使用),则必须创建一个新类型以用作返回类型(或使用动态,但它几乎同样糟糕。)
public class MyReturnType
{
public AType a {get; set;}
public BType b {get; set;}
public CType c {get; set;}
}
public IList<MyReturnType> GetGroupProduct(IPrincipal user, int year)
{
...
select new MyReturnType
{
a=...,
b=...,
c=...
}).ToList();
}