タグ

linqに関するteracy_junkのブックマーク (55)

  • neue cc - ToArray vs ToList

    LINQの結果は遅延評価なので、その場で全部評価して欲しかったりする場合などに使うToArrayとToList。どちらを使っていますか?私はToArrayのほうが好みです。と、いうのも、LINQで書く以上、長さは決まったようなものなので、これ以上AddやRemoveしたいことなんてほとんどない。勿論、必ずないとは言いませんので、その場合だけToListを使いますが、そうでない場合は、長さが固定だという意図を示すためにもToArrayが好ましい。 パフォーマンス T[]やList<T>に変換されたあとだと、T[]のほうが、大体においてパフォーマンスは良い。という点でもToArrayがいいかなあ、と思うわけですが、それはさておき、ではToArrayとToListメソッドそれ自体のパフォーマンスはどちらのほうが良いでしょうか?理屈の上ではToListのほうが上です。というのも、変換処理は下記の図

  • LINQチートシート的なもの - Qiita

    UnityのC#のコード(幾つかの公式Assetとか)読んでたらFindとかいっぱい使ってあって悲しくなったんでLINQのメソッド一覧的なの作ってみました。 お願いだからforeach+List.AddじゃなくてSelect使ってとか お願いだから引数配列じゃなくてIEnumerableにしてとか なんでforeach回すだけなのにToArrayやってるの?とか 明らかに適切な場所じゃないとこで使っていて悲しかったんや・・・ とりあえずこんな事できるよ~的なの作ってみました。 とりあえずC#書く人なら常識的なところ辺りまで ※ファイルの頭に当然using System.Linq;入れています ※ソースコード形式です。各メソッド最後の行は出力を示します ※IEnumerableをシーケンス表記で統一しています。(リストと読み替えてもいいと思います) ※LINQは基的に少しだけ低速ですが気に

    LINQチートシート的なもの - Qiita
    teracy_junk
    teracy_junk 2018/03/09
    久々に触ったので。Rxに手が馴染んでいるので面倒
  • LINQで書くとデバッグしづらいよね?そんなことないよ - かずきのBlog@hatena

    小ネタです。 LINQで処理をぱぱっと1ステートメントで書けると気持ちいいですよね。 でも、デバッグ難しくない?ということがあるのですが大丈夫です安心してください。 ブレークポイントのはり方のコツさえつかめば大丈夫です。例えば以下のようなコードがあるとします。 using System; using System.Linq; namespace ConsoleApp10 { class Program { static void Main(string[] args) { var numbers = new[] { 1, 2, 2, 3, 3, 3, 4, 4, 4 }; var values = numbers .Where(x => x % 2 == 0) .Distinct() .Select(x => x * x); foreach (var value in values) {

    LINQで書くとデバッグしづらいよね?そんなことないよ - かずきのBlog@hatena
  • LINQでメモリを節約しないと処理速度はどうなってしまうのか - Qiita

    記事は、エムティーアイ Advent Calendar 2016 20日目 の記事です。 記事の目的は? 備忘録です。 以前、LINQの実装ミスで、データ取得ロジックの負荷が高まって、処理速度に大きな影響を与えてしまったことがありました。 もう1ヶ月くらい前の話なのですが、どれくらいになっていたのか実際に測定して見よー、と思ったのでやってみました。 どんな実装ミス? 下記です。 numsAとnumsBの被っている数値を、resultに格納するという簡単な処理を、修正前と修正後の2パターン書いてあります。 修整前と修正後の違いは、ToList()メソッドの呼び出しタイミングです。 もちろん、修正後の方が速く処理します。 実装時は、もう少し複雑でしたが、簡潔にかくとこんな感じです。 var numsA = Enumerable.Range(1, 100).ToList(); var num

    LINQでメモリを節約しないと処理速度はどうなってしまうのか - Qiita
  • LINQのそのForEach、実はSelectで書き換えられるかも - Qiita

    LINQの拡張メソッドとしてよく挙げれるForEach。 標準ではIList<T>のみに実装されているのでIEnumerable<T>で使えるように拡張されてる方も多いのではないでしょうか? 実はそのForEach、Selectなど他のLINQのメソッドに置き換えられるかもしれません。 例えば(私が)よく見るのは以下のケース。(あまり良い例ではないけど…。) var list = new List<int>(); var range = Enumerable.Range(0, 10).ForEach(x => { list.Add(x); });

    LINQのそのForEach、実はSelectで書き換えられるかも - Qiita
  • Build expression tree for LINQ using List<T>.Contains method

    Problem I'm working on refactoring some LINQ queries for several reports in our web application, and I'm attempting to move some duplicate query predicates into their own IQueryable exension methods so we can reuse them for these reports, and reports in the future. As you can probably infer, I've already refactored the predicate for groups, but the predicate for codes is giving me problems. This i

    Build expression tree for LINQ using List<T>.Contains method
  • LINQを使ってSQLの基本的なことをやってみる - ぴよぴよエンジニアの日記

    2016 - 01 - 31 LINQを使ってSQLの基的なことをやってみる C# LINQ LINQ とは、 Language Integrated Query の略称で、 C# や VB などの .NET Framework 対応言語に、 リレーショナルデータや XML に対するデータ操作構文を組み込む (+ データベースや XML 操作用のライブラリ) というものです。 LINQ - C# によるプログラミング入門 | ++C++; // 未確認飛行 C LINQ の詳しい説明は上記リンクをご参照ください. 今回は、 SQL の基的なことを LINQ を使ってやってみたいと思います. ちなみに LINQ to SQL ではなく、 LINQ to Objectです. デー タセット namespace LINQSample { public enum Sex { Male,

    LINQを使ってSQLの基本的なことをやってみる - ぴよぴよエンジニアの日記
  • ラムダ式(C# によるプログラミング入門)

    概要 Ver. 3.0 ラムダ式(lambda expression)と言うのは、 関数型言語と呼ばれるような種類のプログラミング言語における用語なのですが、 関数(メソッド)を整数などの変数と全く同列に扱う手法のことです。 C# 3.0 で導入されたラムダ式は、 以下のようなものだと思ってください。 「デリゲート」に対して代入すると、「匿名メソッド式」と同じ扱いになる。 Expression 型の変数に代入すると、式木(expression tree)データになる。 ポイント C# 3.0 で導入されたラムダ式には、2通りの意味があります。 匿名メソッドを 2.0 の頃の記法より簡単に書ける。 上述の匿名メソッドと同じ記法で式木を作れる。 例:Func<int, int> square = x => x * x; 匿名メソッドの記法の簡略化 まず、1つ目。 ラムダ式は、 C# 2.0 の

    ラムダ式(C# によるプログラミング入門)
  • C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~

    Hokuriku.NET C# 勉強会「C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~」 https://atnd.org/events/57085 で使用した資料に加筆 1. LINQ to Objects 復習 2. IQueryable&lt;t> 3. 式木 (Expression Tree) 4. 式木メタ プログラミング 5. LINQ プロバイダーRead less

    C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
  • 第8回 LINQメソッド形式編(3/4) - @IT

    メソッド形式のクエリの接続 ここでは別の形で、クエリ式とはガラッと雰囲気の変わるメソッド形式を紹介しよう。 前々回、into句を用いて2つのクエリを接続した例を紹介した。 using System; using System.Linq; class Program { static void Main(string[] args) { var query = from n in Enumerable.Range(1, 10) select n * n into m where m > 50 select m; foreach (int n in query) Console.WriteLine(n); } } これは、メソッド形式ではどのように記述すればよいのだろうか。 where句にはWhereメソッド、select句にはSelectメソッドがあったように、into句にはIntoメソッド

  • LINQでLEFT OUTER JOINする - Qiita

    SELECT E.Id As 'EmpId,' E.Name As 'EmpName', D.Name AS 'DeptName', E.HireDate FROM Employee E LEFT OUTER JOIN Department D ON D.Id = E.DeptId var emps = new List<Employee>(); var depts = new List<Department>(); var infos = emps.GroupJoin(depts, emp => emp.DeptId, dept => dept.Id, (emp, tmpDept) => new {emp, tmpDept}) .SelectMany(x => x.tmpDept.DefaultIfEmpty(), (x, dept) => new { EmpId = x.emp.Id,

    LINQでLEFT OUTER JOINする - Qiita
  • LINQで組み合わせを列挙する - C Sharpens you up

    先週から話題のこちらのプログラミング課題 新人女子プログラマの書いたコードを直すだけの簡単なお仕事です!|paizaオンラインハッカソンVol.1 アプローチの仕方はいろいろあると思うのですが、新宿Scala座主宰のid:numanuma08氏は「Scalaだったらリストからすべての組み合わせを生成するのもcombinationsメソッドで一発だよ」といつも通りScala全力押しです*1。 ところがその紹介の最後で C#もLinqとか使えばいけそうな気がします。 #新宿Scala座 で新入女子社員を救ってきた 今煽られました。 完全に煽られました。 LINQとやらで組み合わせ列挙書いてみろよほら張り子の虎とか笑わないからさと煽られました。 書いてやろーじゃねーの。 課題の整理 次のようなリスト {2, 3, 5, 7} から2つ組をと指定されたら { {2, 3}, {2, 5}, {2,

    LINQで組み合わせを列挙する - C Sharpens you up
  • LINQ(メソッド構文)を用いた複雑めなSQL発行時のメモ - Sanwa Systems Tech Blog

    こんにちは!井上です。 EF&LINQでちょっと複雑なSQLを書きたいときのメモ。 環境 .NET Framework 4.5.1 Entity Framework 6 MySQL 5.6 C# こちらの続きです。 tech.sanwasystem.com 複数テーブルの結合(INNER JOIN) var lists = db.TableA .Join(db.TableB, a => a.id, b => b.id, (a, b) => new { a.id, a.value1, b.value2 }) .Join(db.TableC, ab => ab.id, c => c.id, (ab, c) => new { ab.id, ab.value1, ab.value2, c.value3 }); 結合を先に書くパターン var lists = db.TableA .Join(db.T

    LINQ(メソッド構文)を用いた複雑めなSQL発行時のメモ - Sanwa Systems Tech Blog
  • Use string.Compare(a, b) in Expression

    I've been teaching myself Expression Trees since yesterday and I'm having problems comparing two string values. I've made this test case that fails with the error: No method 'Compare' on type 'System.String' is compatible with the supplied arguments. Fails at run-time on the left = Expression.Call( Type type = typeof(string); Expression left, right; left = Expression.Constant("1", type); right = E

    Use string.Compare(a, b) in Expression
  • 複数のラムダ式から式木を構築する - Qiita

    前説 (int x, int y) => bool というラムダ式で表せる Expression<Func<int, int, bool>> 値を作ることを考える。 …ということで、この tips はラムダ式はラムダ式でも、式木を生成するラムダ式を対象とした tips となります。 このとき、(x, y) => x * y < 20 と (x, y) => x + y == 8 というラムダ式が渡されたとき、この 2 つの式を組み合わせて、両者を満たすときのみ true を返し、それ以外の場合は false を返す式を作りたい。 つまり、以下のような感じで。 Expression<Func<int, int, bool>> expr1 = (x, y) => x * y < 20; Expression<Func<int, int, bool>> expr2 = (x, y) => x +

    複数のラムダ式から式木を構築する - Qiita
  • LINQ で動的に OR 検索するやつ - 鷲ノ巣

    Entity Framework なんかを使っていて、データを検索したいとき。 検索フォームからユーザーに検索条件を入力してもらって、それで OR 検索をしたいとなると、ちょっと面倒です。 もちろん、何も入力しなかった項目ではフィルタリングを行いません。 AND 検索だけなら、Where メソッドをチェーンさせて行けばいいのですが、OR 検索が絡むと、そう簡単にはいきません。 こういう場合は Expression Tree を頑張って組み立てなければいけないわけですが、やり方はこのへんを見て頂いてですね… LINQ文で動的にWhere句を組み立てるには?[3.5、C#、VB] - @IT Expressionを使った動的なOR文の生成 - Architect Life いや、いやいやいや。わけがわからないし面倒くさい。そんなのやってらんない。 もうちょっと簡単に、こんな感じでやりたいわけで

    LINQ で動的に OR 検索するやつ - 鷲ノ巣
  • 【ちゃんと投げよう】あなたの作ったオレオレLINQメソッドは間違ってるかもしれない!【ArgumentNullException】 - Qiita

    【ちゃんと投げよう】あなたの作ったオレオレLINQメソッドは間違ってるかもしれない!【ArgumentNullException】C#.NETLINQ例外 はじめに C#最高ですよね!LINQ最高ですよね!!! さてそんなC#・LINQに対してですが、「LINQにこういうの欲しいな〜。無いからLINQみたいにIEnumerable<TSource>の拡張メソッドとして、IEnumerable<TResult>を返すメソッドを作ろう!」と「オレオレLINQメソッド」を作ったことがある人も結構いると思います。 そんな「オレオレLINQメソッド」ですが、気をつけないと思わぬ落とし穴にはまるかもしれません。 あなたの作った「オレオレLINQメソッド」、ちゃんと正しくArgumentNullException投げますか? LINQの多くのメソッドは遅延実行 LINQの多くのメソッドは遅延実行されます

    【ちゃんと投げよう】あなたの作ったオレオレLINQメソッドは間違ってるかもしれない!【ArgumentNullException】 - Qiita
  • Android-Java でリスト操作するなら IxJava が決定版だと思う - Qiita

    Android では Java8 が使えないため、 'Yet another Stream API' なライブラリがいくつかあります。 Androidでリスト操作するなら、Lightweight-Stream-APIが便利 - Qiita JavaにC#のLINQを移植してみた - jLinqer - Qiita What is the Java equivalent for LINQ? - Stack Overflow 普段 C# を使っているため LINQ to Objects の便利さをなんとか Androidアプリ開発でも享受したい。 そこで個人的に「これだ!」と思っているライブラリが IxJava です。 akarnokd/ixjava: Interactive Extensions for Java IxJava とは? 一言でいえば 「LINQ to Objects の Ja

    Android-Java でリスト操作するなら IxJava が決定版だと思う - Qiita
    teracy_junk
    teracy_junk 2016/01/22
    『IxJava とは?一言でいえば 「LINQ to Objects の Java版」 です。』
  • [C# .Net] ちょっと上行くC#erになるためのLINQの使い方。 | TOACH

    先日TOACHで紹介したLINQの入門記事は、おかげさまで多くの人に読んでもらえたようだ。 Hello LINQ world. 野暮ったいC#コードから卒業したいアナタへ。LINQ 基の4つ。 このLINQの第一歩では、Any、Select、Where、FirstOrDefaultという4つの基的なメソッドを紹介した。 今回は、もう少し込み入ったことをするときに使えるメソッドを説明したい。 重複を取り除く -Distinct- 配列中の重複している要素を刈り込んで、ユニークな要素だけにしてくれるサッパリメソッド。 作例では、[0, 1, 2, 2, 3, 4] なる”2″が重複している配列にDistinctをかけ、[0, 1, 2, 3, 4]という重複のない状態にしている。var numbers = new[] { 0, 1, 2, 2, 3, 4 }; // This contai

    [C# .Net] ちょっと上行くC#erになるためのLINQの使い方。 | TOACH
  • 【LINQの前に】ラムダ式?デリゲート?Func<T, TResult>?な人へのまとめ【知ってほしい】 - Qiita

    【LINQの前に】ラムダ式?デリゲート?Func<T, TResult>?な人へのまとめ【知ってほしい】C#.NETLINQ.NETFramework はじめに 引数にラムダ式を渡す ラムダ式の型はFuncとActionが用意されている ラムダ式はデリゲートを作るためのもの このような記述や説明をしているC#関連のブログをたまに見かけます。実はこれらは正確には違ったり、正しくなかったり、ちょっと足りなかったりします。「先ほどの説明は正しいのではないか?」と思った方、ぜひこの投稿を読んでください。ラムダ式やその関連要素についての理解が深まると思います。 そして、「LINQを勉強したいのだけれど、ラムダ式とかFunc<T, TResult>とかわからん!」、「Func<TSource, bool>型の引数をとるメソッドに、『num => num > 0』とラムダ式を書いているけれど、それがどう

    【LINQの前に】ラムダ式?デリゲート?Func<T, TResult>?な人へのまとめ【知ってほしい】 - Qiita