How can I import the System.Linq namespace to Boo?

16,125

Solution 1

Why do you need System.Linq in your DSL? Sytem.Linq must be "hidden" in your framework. Besides using Linq in Boo, it's kinda of verbose (in my opinion) and your DSL should hide this verbose stuff...

import System.Linq.Enumerable from System.Core
bar = List of string() 
bar.Add("foo")
bar.Add("baz")

baz = bar.Where({x as string | x =="baz"}).Single()

About using the System.Linq, haven't tried but I found this link Boo Markmail, where the code above was copied...

Solution 2

Try adding a reference to the System.Core assembly to your project. Most of the classes in the System.Linq namespace are found in that assembly.

If that doesn't work, you might also try adding a reference to System.Data.Linq.

And in the future, don't underestimate the usefulness of the error messages provided by the compiler. Yes, sometimes they are cryptic and other times they are even misleading. But they're certainly a good place to start when you're trying to figure out why something won't compile that you expected to work.

Share:
16,125
Omid-RH
Author by

Omid-RH

I enjoy finding solutions for problems and never turn away from a challenge. And I always look for ways to improve myself and the projects I work on.

Updated on June 16, 2022

Comments

  • Omid-RH
    Omid-RH almost 2 years

    When I try to import the System.Linq namespace to Boo compiler, I get this error:

    Boo.Lang.Compiler.CompilerError:

    Namespace 'System.Linq' not found, maybe you forgot to add an assembly reference?

    I use "Rhino.DSL.dll" and my DSL engine code is here:

    public class MyDslEngine : DslEngine
    {
        protected override void CustomizeCompiler(BooCompiler compiler, CompilerPipeline pipeline, string[] urls)
        {
            pipeline.Insert(1, new AnonymousBaseClassCompilerStep(typeof(DslBase), "Prepare",
                "System.Linq",
                "Azarakhsh.Framework.Repository" //it's my repository framework
                ));
            pipeline.Insert(2, new UseSymbolsStep());
            pipeline.Insert(3, new RunScriptCompilerStep());
        }
    }