2011-10-25 84 views
4

如何在另一种方法中使用此LINQ的结果并获取属性CountryIDcount通过LINQ匿名类型对象迭代

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,所以我不能返回对象类型。

回答

6

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

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

+1:一个简单的一天:) – leppie

+0

对不起,我不能马上写这个,HANDELING这么多东西就溜:我想用这个函数内部,返回LINQ的结果,而不预处理,并处理它在其他方法上。我应该返回什么类型的方法以及如何处理调用方法上的对象?此外,使用WCF所以无法返回对象类型...谢谢你,并为不完整的问题抱歉。 –

+0

@LuísSousa:你可以在'select g;'停下来并返回一个'IGrouping '。如果你想返回“最终”的对象,你应该为他们上课。 – Jon

1

你可以把结果作为你按照常规的C#对象。智能感知系统将帮助您进行匿名输入。

foreach (var anonymousObject in q) 
{ 
    // anonymousObject.CountryID; 
    // anonymousObject.count; 
} 
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); 
    }); 
+1

我正在考虑一个主张变异的ForEach的downvote ... ;-) – Jon

+0

@Jon:因为返回类型是'void',我觉得它是半可接受的:)(注意:我不认为我曾经使用这样的构造) – leppie

+0

现在试试这个。仍然不确定在LINQ方法返回什么类型的对象...谢谢 –

0

匿名类型是局部的,只在声明的方法不能直接归还。如果您需要将它们暴露在声明方法之外,则需要投影到可以命名的类型(您自己的自定义类或其他现有框架类,如KeyValuePair)。