迭代LINQ AnonymousType对象

时间:2011-10-25 15:31:02

标签: c# linq

如何在另一种方法中使用此LINQ的结果并获取属性CountryIDcount

public IQueryable GetRequestsByRegion(string RequestType)
{
        try
        {
            var q = from re in context.RequestExtensions
                    from r in context.Requests
                    where re.ExtensionID == r.ExtraInfoID
                    && r.OriginalRequestID == null
                    && r.RequestType == RequestType
                    group re by new { CountryID = re.CountryID } into grouped
                    select new { CountryID = (int)grouped.Key.CountryID, count = (int)grouped.Count(t => t.CountryID != null) } ;

            return q;
        }
        catch (Exception ex)
        {

        }

        return null;

    }

public void GetAllInformationRequestsByRegion()
    {
        IQueryable dict = GetRequestsByRegion("tab8elem1");

        /* How to iterate and get the properties here? */

    }

返回类型和变量类型不需要是指示的......这只是我的尝试。我也在使用WCF,所以我不能返回对象类型。

4 个答案:

答案 0 :(得分:6)

就像它是任何其他类型的对象一样:

foreach(var obj in q) {
    var id = obj.CountryID;
    var count = obj.count;
}

答案 1 :(得分:2)

其他

也许你想在方法之外使用它?然后使用这样的东西:

public void ForEach<T>(IEnumerable<T> l, Action<T> a)
{
  foreach (var e in l) a(e);
}

用法:

ForEach(from x in bar select new { Foo = x, Frequency = 4444, Pitch = 100 }, 
  x => 
  { 
    //do stuff here
    Console.WriteLine(x.Foo);
    Console.Beep(x.Pitch,x.Frequency);
  });

答案 2 :(得分:1)

您可以像处理常规C#对象一样处理结果。 Intellisense将帮助您进行匿名输入。

foreach (var anonymousObject in q)
{
    // anonymousObject.CountryID;
    // anonymousObject.count;
}

答案 3 :(得分:0)

匿名类型是声明它们的方法的本地类型。您不能直接返回它们。如果需要将它们暴露在声明方法之外,则需要将其命名为可以命名的类型(您自己的自定义类或其他现有框架类,如KeyValuePair)。