在查询linq中的Foreach

时间:2014-09-02 13:45:09

标签: c# linq

我在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或其他类型。

enter image description here

如何在此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;
    }

2 个答案:

答案 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(); 
}