# Ingredients:

-          Visual Studio 2008 (Beta2 or Higher)

Categories: LINQ-To-Objects

Instructions:

-          Open Visual Studio 2008, and Click ‘File/New Project’. Find and double-click the ‘Console Application’ Icon

Module Module1

Sub Main()

Dim primes = GetPrimesInRange(30, 50)

For Each n In primes

Console.WriteLine(n)

Next

End Sub

Function GetPrimesInRange(ByVal low, ByVal high) As IEnumerable(Of Integer)

Dim range = Enumerable.Range(1, high)

Return From num In range _

From num2 In range _

Where num Mod num2 = 0 _

Group By num Into Count() _

Where Count = 2 And num > low _

Select num

End Function

End Module

-          The grouping is used to select only those numbers that have exactly two factors (i.e. they're prime)

• Post
• Doesn't that only work if the low value is 0 or 1 ?

And isn't this a really innefficient way of doing this as there is no early exit for a given value once the count  > 2.

BTW: I haven't got Beta 2 (what up with that ?) but

the code:

Group By num Into Count() _

Where Count = 2 _

looks strange to me. Why does Count have () after it, yet when you refer to it on the next line it is as a single value not an array ?

• I have to agree with the first comment. I have a general feeling about LINQ that it basically looks impossible to debug and is not intuitive. I have started to play with it in beta 1 and I have tried ScottGu's LINQ to SQL examples and every time I work with them I feel like they are useless in an enterprise application. For simple applications, they seem useful for querying simple collections. But in every example that I see an anonymous method and LINQ in I just fell yucky when I imagine trying to debug someone else's I-Used-A-Cool-Feature code.

Cheers,

Aaron

• Thanks Bill, I've updated the sample so it works for any given range now.  This isn't really intended to be a textbook example of calculating primes, so I'll happily concede that it's grossly inefficient :)

As far as the Count thing goes...there's parentheses on the first one because we're calling the Count() function, but we don't need it on the second one because that's a property.  Since we didn't explicitly name our Group, the compiler inferred it's name to be Count.  If you want to name the group you could do this instead:

Group By num Into Factors = Count() _

Where Factors = 2 And num > low _

Thanks!

Jonathan

• The VB team just started a LINQ Cookbook series. These are great because they show you how you can easily

• I agree that this example takes some time to understand. I believe LINQ is great when you just need a simple query. If you need something debuggable, you could do the same with extension methods from the System.Query.Sequence class and some explicitly defined lambdas. 3-4 times more code though.

It is great, however, that LINQ can do such things.

• 引用:LINQ菜谱,菜单3:在给定的范围内找到所有的素数(JonathanAneja) [原文作者]：JonathanAneja

[原文链接]：LINQCookbook,Reci...

Page 1 of 1 (6 items)