UPDATE2リフレクション を使用するというJamesの提案でさらに遊んで、文字列変数に基づいてプロパティ値を返す何かが機能するようになりました。おそらく最善の解決策ではないと思うので、まだこれを答えにしたくありません。コードは次のとおりです。
DataContext dataBase = new DataContext();
List<string> listOfFields = new List<string>;
List<string> listOfUsers = new List<string>
//strFields and strNames are strings generated from listOfFields and listOfUsers
IEnumerable<myUserData> userInfo = dataBase.ExecuteQuery<myUserData>
("select " + strFields + " from myUserData where user_id in (" + strNames + ")");
foreach(var user in userInfo)
{
foreach(string field in listOfFields)
{
string fieldValue = user.GetType().GetProperty(field).GetValue(user,null).ToString
Console.WriteLine(fieldValue);
}
}
更新: 私は進歩しています!おもう。これは非常にひどい解決策であり、リソースを浪費する可能性があります。まだわかりませんが、これまでに得た空白の画面よりはましです。現在の問題は、フィールド名ではなく値を返す方法を見つけることです。これが私のコードです:
foreach(string userID in listOfUserIDs)
{
//dataBase is a Datacontext
var userInfo = dataBase.myTable
.Where("user_id == @0", userID)
.Select("New(" + strFields + ")");
foreach(var user in userInfo)
{
Console.WriteLine(user);
}
}
これにより、{first_name = JOHN, last_name = DOE} など、その他のフィールドが出力されます。Select 句を変更して値のみを選択する方法を見つけられることを願っています。
私は初心者のプログラマーであり、特に C# やデータベースを扱うものは初めてです。これは、クエリとデータベースを扱う最初のプロジェクトであり、動的クエリに基づいて結果を正常に返す際に問題が発生しています。
正しい情報を取得するクエリの作成に成功しましたが、取得された特定のフィールドにアクセスする方法がわかりません。
IEnumerable<myTable> userInfo = dataBase.ExecuteQuery<myTable>
("select " + Fields + " from myTable where userID in
(" + userNames + ")");
編集:私の悪い命名規則を許してSystem.Collections.Generic.IEnumerable<DatabaseConnection.myTable>{System.Data.Linq.SqlClient.SqlProvider.OneTimeEnumerable<DatabaseConnection.myTable>}
ください. Tables フォルダー内にありました XD
myTable は型クラス DatabaseConnection です。Fields は検索しているフィールドの文字列であり、userNames はそれぞれコンマで区切られた複数のユーザー名の文字列です。例: Fields = "firstName, lastName, idNumber" userNames = "John, Jane, Bob"
私の質問は、現在返されているオブジェクト タイプの各ユーザーの各フィールドを反復処理することは可能ですか? 私はそれが次のように明示的に行われるのを見ただけです:
foreach(var x in userinfo)
{
Console.Writeline(x.firstName);
}
私の現在の状況では、ユーザーは特定のユーザー名に関連する他のフィールドを必要とする可能性があるため、これは機能しません。
Dynamic Linq Library も使用してみましたが、選択文字列を正常に設定できましたが、userID が複数の異なる文字列に等しい場合に where 句を正しく設定する方法がわかりません。(名前の数は必ずしも同じではありません)
var dataInfo = dataBase.myTable
.Where("userID == @0", "(" + userIDs + ")")
.Select("New(" + fields + ")");
私はこれで何日も立ち往生しています。どんな助けでも大歓迎です。多分私は解決策がこれには単純すぎると思っていますか?最初のコードで GetProperties() などを使用できるようにすべきだと思います。
これが回答されていて、フォーマットが不十分である場合も、申し訳ありません(最初の投稿はこちら)。調査中に、探しているものが見つからないか、コードを正しく理解していない可能性があります。助けてくれてありがとう!
編集:これはすべて、私が現在取り組んでいる Excel アドイン用です。各フィールドの結果を特定のセルに配置できるように、情報をリストまたは何らかの形式のオブジェクトに取得する必要があります。
編集:間違った用語を使用していたらすみません。私の間違いは Enumerable 型にあるようで、「myTable」という名前を付けると混乱する可能性があります。これは、プロジェクトの .dbml ファイルでサーバー エクスプローラーから抽出したテーブルです。
編集:個々のユーザーごとにクエリを実行し、その1つのユーザー名に対して要求された各フィールドを取得するのは、どれほどひどく非効率的で時間がかかりますか? これが単純なループを追加する必要があるだけのものである場合、私はばかげていると感じるでしょう。