Where句が変数に由来するLINQステートメントを作成しようとしています。例えば:
string whereClause = address.Zip == 23456;
var x = from something in someList where whereClause;
これは可能ですか?私はそれを機能させることができないようです。
おかげで、
更新-私のwhere句は事前に定義されており、ユーザー入力に基づいているため、これは私にとってはうまくいきません。基本的にwhereClauseはメソッド内で構築されず、LINQを実行するメソッドのパラメーターです。私はここに良い例があることをうまく説明しませんでした:
public void doLnq(string whereClause)
{
var x = from something in someList where whereClause;
dowork(x);
}
更新-提案の一部をまとめてすべてを一元化するため。
多くの可能性があるため、スイッチを使用してwhere句を生成することはできません。
数人が投稿した動的linqの投稿は有望に見えますが、linq to sqlの例とlinq to objectsの問題に関連する問題があります。
およびmsdnを調べた後の@sLaks http://msdn.Microsoft.com/en-us/library/bb353734.aspx AsQueryableを使用する場所を特定するのに問題があります
おかげで、
_Expression<Func<T, bool>>
_をアセンブリして、Where()
拡張メソッドに渡す必要があります。
_Expression<Func<T, bool>> whereClause = a => a.Zip == 23456;
var x = frSomeList.Where(whereClause);
_
[〜#〜] edit [〜#〜]:LINQ to Objectsを使用している場合、Word Expression
を削除して通常のデリゲートを作成します。
この:
var query = from something in someList where whereClause;
以下の略記です:
var query = someList.Where(something => whereClause);
someList
がIEnumerable<Address>
、Where
は Enumerable.Where拡張メソッド を指します。このメソッドは、Func<Address, bool>
次のように定義できます。
Func<Address, bool> whereClause = address => address.Zip == 23456;
var query = someList.Where(whereClause);
リチャードが指摘したように、動的クエリライブラリを使用して動的フィルタ式を作成できます。 Linq-To-Objectsを使用する場合は、必ずIEnumerable<T>
からIQueryable<T>
最初。以下は(不完全な)例です。
using System.Linq.Dynamic;
namespace System.Linq.Dynamic
{
public class Example
{
// Assuming some value is assigned to below field somewhere...
private IEnumerable<Address> m_Addresses;
public void FilterByZipCode(string zipCode)
{
var x = m_Addresses.AsQueryable().Where("Zip == @0", zipCode);
dowork(x);
}
}
public class Address
{
public String Zip { get; set; }
// More Properties...
}
}
それはLINQの組み込み機能です。 Where拡張メソッドを使用するだけです。
詳細については、「 LINQクエリ構文とメソッド構文(C#) 」を参照してください。