問題タブ [linq-expressions]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
1754 参照

c# - OrderBy 式と Where 式を組み合わせる

Expression<Func<T,bool>>複数の式を組み合わせることができる次の質問を見つけました。

呼び出しなしで2つのC#ラムダ式をマージする方法は?

同様の手法を使用して、どのように .OrderByExpression<Func<Entity, Key>>を .WhereExpression<Func<Entity, bool>>型の 1 つの Expression にマージするのか、それとも型から継承するのか疑問に思っていますSystem.Linq.Expressions.Expression

私は、T => T == ...パブリック メソッド.Where.OrderBy. これは、このクラスが作成する式を QueryTranslator に渡して適切な SQL を作成することを意図しています。

このスタイルの QueryTranslator は、QueryProvider から呼び出されると、通常、1 つSystem.Linq.Expressions.Expressionを引数として取り、SQL に変換します。

.Where2 つのFuncをマージするための上記の質問を理解して理解することができます。次のブログ投稿はこれに特に役立ち、各例をたどりました。

http://blogs.msdn.com/b/meek/archive/2008/05/02/linq-to-entities-combining-predicates.aspx

この CodeProject の記事も役に立ちました。

http://www.codeproject.com/Articles/24255/Exploring-Lambda-Expression-in-C

ただし、.OrderBy Func を .Where Func と組み合わせる場合、2 つのジェネリック引数は異なります。.Where の場合は 、Func<Entity, bool>.OrderBy の場合はFunc<Entity, Key>.

これら 2 つの式をマージすることは、表面的には、同じ一般的な引数を持つ 2 つをマージするほど簡単ではありません。

組み込みの Func-Expression-producing-engine (正確な用語は不明) は、.Where Func と .OrderBy Func を組み合わせることができます。この 2 つの表現が合体して 1 つになったとき、その内部で何が起こるのか、私は興味がありSystem.Linq.Expressions.Expressionます。可能であれば、各式でエンティティが同じタイプであると仮定してExpression<Func<Entity, bool>>、をどのように組み合わせますか?Expression<Func<Entity,Key>>

0 投票する
2 に答える
1662 参照

c# - LINQを使用して型オブジェクトからラムダ式を作成するにはどうすればよいですか?

SetValueLINQ式を使用してリフレクション->を高速化しようとしています。

私の問題はこの方法です:

私はこれをこのように呼びます:

問題はこの行です:

field.FieldTypeActionはジェネリックスを使用しているため、文字列を...に置き換えることはできません。

ステートメントを作成せずにこれを実行し、switch(field.FieldType)可能なタイプごとにジェネリックメソッドを配置する可能性はありますか?これは非常に時間がかかりますか?

0 投票する
2 に答える
1020 参照

.net - System.Linq.Expressions API を使用して LINQ で列を選択する

IEnumerableLINQ 式を使用して、UI にバインドできる結果セットから列を動的に選択しようとしています。この時点で、LINQ 式でのプロジェクションの基本を把握するのに苦労しています。

次のような文字列のリストがあるとしましょう。

ラムダ式を使用すると、次のようにして文字列の長さのコレクションを簡単に選択できます。

このステートメントの結果はmyStringLengths、 elements を持つというコレクションになります3, 3, 5

私が理解できないように見えるのは、LINQ 式を使用して同等の結果を生成する方法です。

編集: LINQ 式と言うときSystem.Linq.Expressionsは、LINQ ステートメントまたはラムダ式の標準形式ではなく、名前空間で API を使用することについて話しています。上記で明確にわかるように、私はそのように投影を生成する方法にすでに精通しています。

どんな助けでも大歓迎です。

0 投票する
1 に答える
1590 参照

.net - Using Expression.Call with Queryable.Select with a type known only at runtime

I am trying to select a column from an IEnumerable collection that has a type known only to me at runtime. The only way I can think of using this is using LINQ expressions to build a dynamic call to Queryable.Select. However, I'm having a lot of trouble figuring out the proper syntax to accomplish this.

An example of how I would do this in the happy-go-lucky world of knowing everything I need at compile time, my code would look like this:

Unfortunately, in reality I have no idea that the collection I have is of type String, or that the property I want to select is Length. What I do have is an IEnumerable collection of items, as well as a PropertyInfo of the column that I want to select which provides me all of the type information I need.

As far as expressions go, I've been able to create a LINQ expression that I believe would represent the lambda I would normally pass to select ( Assume I am trying to perform the same operation above, with String and String.Length)

Now hopefully all that's left is to build is the call to Queryable.Select. To me, the syntax of Expression.Call is pretty confusing to say the least. My attempt is as follows (which fails with no errors or explanation of any kind):

I tried doing this in an alternative way without using the Type[] parameter and using the expressions for my item and property to no avail:

The problem is that I'm pretty much just guessing at this point. However, the whole idea of building the function call, when to use Types or Expressions, which types or expressions to use, or where to even use them is just plain confusing. Any help getting me the last part of the way there and clearing some of this mystery would be greatly appreciated. (I'm perfectly happy with examples in C#)

0 投票する
2 に答える
803 参照

c# - linq式から情報を取得するときにリフレクションが使用されますか?

私は次の拡張メソッドを持っています:

文字列の代わりにプロパティ名を渡すときにlinq式を使用して強い型付けを提供し、この関数を使用してプロパティの名前を文字列として取得します。この方法は反射を使用しますか?

私が尋ねる理由は、このメソッドがコードで非常に頻繁に使用されており、十分に高速であることを望んでいるためです。

0 投票する
1 に答える
747 参照

c# - LINQ:一連のANDを使用して動的フィルターを構築する

次のようなクエリを動的に作成するのに苦労しています。

ReportDefinitions.DiscriminantsはIDictionary<string, Guid>;です。単純な式の作成方法は知っていますが、これを作成する方法がわかりません。「Any」は非常に複雑に見えます。理解するのが難しいAnycall

誰もがこれに対処する方法を知っていますか?

0 投票する
1 に答える
317 参照

.net - LINQ式とString.Formatを使用した文字列の比較

LINQ式を使用してコレクション内の値を動的に検索していますが、操作の結果である文字列を検索することによって引き起こされると思われる奇妙な問題が発生しましたString.Format()

これは私がやろうとしていることの簡略版です。実際には、検索している値のタイプが実際にはわからないため、すべてをとして扱う必要がありObjectます。

ここで何が起こるかというと、標準メソッドは正しく1の結果を返し、LINQ Expressionsメソッドは0を返します。ただし、String.Format()(myStrings.Add(stringToFind))を使用せずに特別な値がコレクションに追加されると、式も正しい結果を返します。 。

String.Format()が文字列のエンコーディングを変更するために行うこと、または文字列値の定数式の作成方法に影響を与える何かがありますか?この制限を回避するLINQ式を使用して2つの値を比較する別の方法はありますか?

0 投票する
1 に答える
545 参照

asp.net-mvc - Selectを既存のLinq式に追加する方法

編集可能なテーブルを作成しようとしています。動的テーブルがあり、列を表示または非表示にすることができます。編集ボタンのある追加の列があります。これを押すと、Ajax呼び出しを実行して、編集可能なバージョンの行を取得します。

私のビューモデル:

アイテムはどこにありますか:

テーブル行を作成するための次の拡張機能があります。

この関数は、次のように私のビューから呼び出されます。

EditorCellForメソッドのシグネチャ:

私の現在の問題は、selectCallの作成にあります。ラムダ式の式を作成したい:

次のエラーが発生します。

http://www.hanselman.com/blog/TheWeeklySourceCode47ASPNET35DynamicDataFilterRepeatersAndDynamicLinqQueryGeneration.aspxで見たその部分を取り巻くコードのほとんど。

私は午前中ずっと問題を探していましたが、今のところ運がありません。

0 投票する
1 に答える
555 参照

c#-4.0 - 静的(コンパイル時)タイプのIDynamicMetaObjectProviderを取得するにはどうすればよいですか?

コンパイル時の型のコンテキスト/スコープで動的式(ユーザー提供)を実行したい。以下の例では、コンテキストは任意のコンパイル時タイプのインスタンスです。評価用のスコープを作成するために、利用可能なすべてのプロパティとそのタイプがコンパイル時にわかっているという事実を利用したいと思います。

私が取りたくない解決策は次のとおりです。

  1. コンテキストがDynamicObjectから継承し、GetMemberを上書きするようにします(パフォーマンス上の理由から)
  2. スコープにコンテキストを追加し、式を「context.a + context.b」に変更します(使いやすさの理由から)

確かに、IDynamicMetaObjectProviderを取得するためのメカニズムはすでに存在しますが、それを理解することはできませんでした。

0 投票する
3 に答える
223 参照

sql-server - ObjectSetを関連するエンティティに制限し、動的な列名で並べ替えます

親と有効なcolumnNameが与えられた場合、動的な列名で並べ替えられた、関連するすべての子を検索します。これが私のコードがどのように見えるかを私が思った方法です:

IEnumerable.OrderBy(string columnName)は存在しません。「動的列名による並べ替え」を実行するために周りを見回して、この見栄えの良いソリューションから始めました。実行時の並べ替え用の式ツリーを作成するにはどうすればよいですか。、ただし、これはIQueryableで動作します

もしそうなら、とにかく私のポケットベルのパフォーマンスを分類して低下させるために、それがネットワークを介してレコードをもたらすだろうと私は思います。だから私は再注文しました:

ObjectSetとObjectQueryはOrderBy(string columnName)を実装し、このコードはコンパイルされますが、エラーが発生します。

タイプ'DataModel.Parent'の定数値を作成できません。このコンテキストでは、プリミティブ型('Int32、String、Guid'など)のみがサポートされます。

もちろん、親IDを取得することはできますが、Child.ParentReferenceも非プリミティブ型です。

レコードセット全体をネットワーク経由でロードする方法はいくつか考えられますが、すべてのMSを使用してデータベースに基本的なディレクティブのセットを渡すのはそれほど難しくないので、何かが足りないように感じます。中心的なテクノロジー。

編集:私がhttp://en.wikipedia.org/wiki/Quiverfullであるふりをして、子供にページを付ける必要があります。:) edit2:動的列名を照会する必要があることを明確にしました。