ここのドキュメントに基づいています: http://docs.composite.net/Data/AccessingDataWithCSharp/How-to-Query-Data-Using-LINQ#_How_to_Query
string[int1,int2,int3..] 型のフィルターを使用してテーブル内のデータをクエリする必要がありますが、その方法がわかりません。
string[] は、フォームの複数選択要素の ID 値を格納する別のテーブル フィールドから取得されます。
テーブル ' Profile ' (AGlobal.profile) には次の列が含まれます。
Id Types(profile_accomtypes)
1 1,2
2 4,7
3 12,4,6
4 3,6,9
次に、合計 12 個の「Type」値をリストする静的テーブル「TypeDesc」(ALocal.proptype) を作成します。
Id Description(proptype_names)
1 The first description
2 The second description
........
12 The twelfth description
クライアントからの送信時にフォームのコンテンツを簡単に処理できるように、厳密にコード化されたクラスを作成しました。フォーム内には複数の複数選択がありました (そのうちの 1 つはプロファイル データ型テーブルの「タイプ」です)。複数選択のそれぞれは、シリアル化された JSON 形式でサーバーに渡されます。 Profile.Types 列に保存する区切り記号。
ここで、Profile Id の Types string[] をロードし、int id 値を使用して TypeDesc テーブルをフィルター処理し、説明を含む Type 値のみを選択して、プロファイル ページの選択内容をクライアントに提供したいと考えています。クライアントの箇条書きリストとして。
プロファイル テーブルのフィルター タイプは常に id 整数です。使用しているコードは次のとおりです。
var myProftype =
(from d in connection.Get<AGlobal.profile>() // find multiselected type string values
where d.Id == StUserSet.utoken
select d).First();
string sProftype = myProftype.profile_accomtypes;
string[] sTypes = sProftype.Split(',');
// now filter proptypes to sTypes
var myTAccomtypes =
(from d in connection.Get<ALocal.proptype>() // get all the types from the DB
where(r => sTypes.Contains(r.Field<int>("Id"))) //Lambda ?
select d).All;
StringBuilder sb = new StringBuilder(0); //create a bullet list string
// Loop over strings
foreach (string s in myTAccomtypes)
{
sb.append("<dd>"+ s +"</dd>");
}
TuAccomtypes = sb.ToString(); // pass string to JQuery Taconite as part of AJAX response to alter DOM.
タイプをフィルタリングしようとしている Lambda でエラーが発生しました。 VS2010 では:
エラー = デリゲート型ではないため、ラムダ式を bool 型に変換できません。
また、フィルターが機能するように、sTypes変数をintに解析する方法もわかりません(必要な場合):(
どこが間違っていますか?db テーブル内の列フィールドからクエリされたコンマ区切りのリストに対してデータセットをフィルター処理するよりクリーンな方法はありますか?
事前に助けやアイデアをありがとう。マーティン。