All Projects → haifenghuang → linq4c

haifenghuang / linq4c

Licence: MIT license
LINQ for C(GroupBy, GroupJoin, Join, Take, Where, Select, etc)

Programming Languages

c
50402 projects - #5 most used programming language
Makefile
30231 projects

Projects that are alternatives of or similar to linq4c

Morelinq
Extensions to LINQ to Objects
Stars: ✭ 2,833 (+7164.1%)
Mutual labels:  linq
Linq.Expression.Optimizer
System.Linq.Expression expressions optimizer. http://thorium.github.io/Linq.Expression.Optimizer
Stars: ✭ 81 (+107.69%)
Mutual labels:  linq
dontasq
⚡🐍 Extends built-in Python collections with LINQ-style methods
Stars: ✭ 31 (-20.51%)
Mutual labels:  linq
PocoDynamo
C# .NET Typed POCO Client for AWS Dynamo DB
Stars: ✭ 39 (+0%)
Mutual labels:  linq
LinqBuilder
LinqBuilder is an advanced implementation of the specification pattern specifically targeting LINQ query generation.
Stars: ✭ 34 (-12.82%)
Mutual labels:  linq
ObservableComputations
Cross-platform .NET library for computations whose arguments and results are objects that implement INotifyPropertyChanged and INotifyCollectionChanged (ObservableCollection) interfaces.
Stars: ✭ 94 (+141.03%)
Mutual labels:  linq
Linqit
Extend python lists with .NET's LINQ syntax for clean and fast coding. Also known as PINQ.
Stars: ✭ 222 (+469.23%)
Mutual labels:  linq
DynamicQueryable
λ Construct Linq queries using strings.
Stars: ✭ 46 (+17.95%)
Mutual labels:  linq
python-linq-samples
Python Linq Examples: Comparision of C# Linq functional programming to Python
Stars: ✭ 69 (+76.92%)
Mutual labels:  linq
linq-fns
👴 LINQ for Javascript, written by TypeScript
Stars: ✭ 74 (+89.74%)
Mutual labels:  linq
Masuit.Tools
该仓库为 https://github.com/ldqk/Masuit.Tools 的镜像仓库,代码更新存在较大的延迟。建议前往源仓库:https://github.com/ldqk/Masuit.Tools
Stars: ✭ 755 (+1835.9%)
Mutual labels:  linq
Linq.ts
linq for typescript
Stars: ✭ 33 (-15.38%)
Mutual labels:  linq
linq2db.LINQPad
linq2db.LINQPad is a driver for LINQPad.
Stars: ✭ 65 (+66.67%)
Mutual labels:  linq
Typescript.net
A JavaScript-Friendly .NET Based TypeScript Library (Moved)
Stars: ✭ 245 (+528.21%)
Mutual labels:  linq
woodpecker
woodpecker http client for Android
Stars: ✭ 17 (-56.41%)
Mutual labels:  chaining
Dapper.lnskydb
基于Dapper的LINQ扩展,支持Lambda表达式,支持按时间分库分表,也可以自定义分库分表方法,且实体类有T4模版自动生成.省去手写实体类的麻烦。已在实际项目使用
Stars: ✭ 228 (+484.62%)
Mutual labels:  linq
Kendo.DynamicLinqCore
KendoNET.DynamicLinq implements server paging, filtering, sorting, grouping, and aggregating to Kendo UI via Dynamic Linq for .Net Core App(1.x ~ 3.x).
Stars: ✭ 36 (-7.69%)
Mutual labels:  linq
QuickDAO
Simple Data Access Object library with LinQ and multiengine support for (Windows,Linux,OSX/IOS/Android) and freepascal (Windows/Linux)
Stars: ✭ 49 (+25.64%)
Mutual labels:  linq
SoftUni-Software-Engineering
SoftUni- Software Engineering
Stars: ✭ 47 (+20.51%)
Mutual labels:  linq
multiplex.js
LINQ for JavaScript.
Stars: ✭ 79 (+102.56%)
Mutual labels:  linq

Linq for C

IMG1 IMG2

Features

  • Most of the LINQ methods(60+) are supported.
  • Chaining of LINQ methods are supported.
  • Lambda is supported(slow).

Examples

For more examples, please see the main.c file.

Example using callbacks

#include <gc.h>
#include "ArrayList.h"
#include "linq.h"

bool WhereCallback(void *item) {
    char *str= (char *)item;
    return str[0] == 'h';
}

void *SelectCallback(void *item) {
    return newStr("%s_1", (char *)item);
}

ArrayList testLinq(ArrayList array) {
    Linq *lq = From(array);

    ArrayList result =
        lq
        ->Where(lq, WhereCallback)
        ->Select(lq, SelectCallback)
        ->ToArray(lq);

    return result;
}

int main() {
    GC_INIT();

    char *str1 = "huang", *str2 = "hai", *str3 = "feng";

    ArrayList array = arrlist_new();
    arrlist_append(array, str1);
    arrlist_append(array, str2);
    arrlist_append(array, str3);

    ArrayList result = testLinq(array);
    for(int i = 0; i < arrlist_size(result); i++) {
        printf("%s\n", arrlist_get(result, i));
    }

    return 0;
}

Example with lambdas

ArrayList testLinq(ArrayList array) {
    Linq *lq = From(array);

    ArrayList result =
        lq
        ->Where(lq,
                lambda(bool, (void *item) {
                    char *str= (char *)item;
                    return str[0] == 'h';
                }))
        ->Select(lq,
                 lambda(void *, (void *item) {
                     return newStr("%s_1", (char *)item);
                 }))
        ->ToArray(lq);

    return result;
}

int main() {
    GC_INIT();

    char *str1 = "huang", *str2 = "hai", *str3 = "feng";

    ArrayList array = arrlist_new();
    arrlist_append(array, str1);
    arrlist_append(array, str2);
    arrlist_append(array, str3);

    ArrayList result = testLinq(array);
    for(int i = 0; i < arrlist_size(result); i++) {
        printf("%s\n", arrlist_get(result, i));
    }

    return 0;
}

Example with macros

#define LINQ_PTR lq

bool WhereCallback(void *item) {
    char *str= (char *)item;
    return str[0] == 'h';
}

void *SelectCallback(void *item) {
    return newStr("%s_1", (char *)item);
}

ArrayList testLinq(ArrayList array) {
    Linq *lq = From(array);

    ArrayList result =
        lq
        ->WHERE(WhereCallback)
        ->SELECT(SelectCallback)
        ->TO_ARRAY();

    return result;
}

int main(int argc, char **argv) {
    GC_INIT();

    char *str1 = "huang", *str2 = "hai", *str3 = "feng";

    ArrayList array = arrlist_new();
    arrlist_append(array, str1);
    arrlist_append(array, str2);
    arrlist_append(array, str3);

    ArrayList result = testLinq(array);
    for(int i = 0; i < arrlist_size(result); i++) {
        printf("%s\n", arrlist_get(result, i));
    }

    return 0;
}

Requirement

As for the garbage collect, you need to install Boehm GC.

# yum install gc-devel      # RedHat family
# apt-get install libgc-dev # Debian family

What's implemented


  • Where
  • WhereIndexed
  • Select
  • SelectIndexed
  • SelectMany
  • SelectManyIndexed
  • SelectManyBy
  • FirstOrDefault
  • LastOrDefault
  • Take
  • TakeEvery
  • TakeWhile
  • TakeWhileIndexed
  • TakeExceptLast
  • TakeFromLast
  • Skip
  • SkipWhile
  • SkipWhileIndexed
  • Any
  • All
  • Reverse
  • IndexOf
  • LastIndexOf
  • Concat
  • Except
  • Union
  • Intersect
  • SumInts
  • SumFloats
  • MaxInts
  • MaxFloats
  • MinInts
  • MinFloats
  • AverageInts
  • AverageFloats
  • Max
  • Min
  • OrderBy
  • OrderByDesc
  • GroupBy
  • Zip
  • Single
  • SingleWith
  • Contains
  • Count
  • CountWith
  • JoinStr
  • Join
  • GroupJoin
  • Aggregate
  • AggregateWithSeed
  • AggregateWithSeedBy
  • SequenceEqual
  • Prepend
  • Append
  • ForEach
  • AlternateBefore
  • AlternateAfter
  • Shuffle
  • Slice
  • Pad
  • PadBy
  • Print
  • Println

License

MIT

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].