C# to JavaScript compiler

# LINQ Support

h5 provides comprehensive support for Language Integrated Query (LINQ), allowing you to write powerful queries over collections in C# that are compiled efficiently to JavaScript.

# Getting Started

To use LINQ, simply import the System.Linq namespace:

using System.Linq;

This makes all standard LINQ extension methods available on IEnumerable<T>, List<T>, arrays, and other collection types.

# Supported Operators

Most standard query operators are supported, including:

  • Filtering: Where, OfType
  • Projection: Select, SelectMany
  • Sorting: OrderBy, OrderByDescending, ThenBy, ThenByDescending
  • Grouping: GroupBy
  • Joins: Join, GroupJoin
  • Aggregation: Count, Sum, Min, Max, Average, Aggregate
  • Set Operations: Distinct, Union, Intersect, Except
  • Element Operations: First, FirstOrDefault, Last, LastOrDefault, Single, SingleOrDefault, ElementAt
  • Conversion: ToArray, ToList, ToDictionary, ToLookup
  • Quantifiers: Any, All, Contains

# Example

var numbers = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

var evenSquares = numbers
    .Where(n => n % 2 == 0)
    .Select(n => n * n)
    .OrderByDescending(n => n)
    .ToList();

// Output: 100, 64, 36, 16, 4
foreach (var square in evenSquares)
{
    Console.WriteLine(square);
}

# Performance Considerations

While LINQ provides expressive syntax, keep in mind that JavaScript engines are optimized for imperative loops (for, forEach). For extremely performance-critical sections (e.g., game loops or heavy data processing), consider using standard loops instead of LINQ if profiling shows a bottleneck.

However, for most application logic, the readability and maintainability benefits of LINQ outweigh minor performance differences.

# LINQ to Objects vs LINQ to SQL

Currently, h5 primarily supports LINQ to Objects. If you need to query a database or remote API using LINQ syntax, you would typically fetch the data first (e.g., as JSON) and then query it in memory using LINQ to Objects.