エンティティのコレクションの特定のプロパティの個別の値のリストを取得する必要があります。
したがって、テーブル A にフィールド x、y、z、1、2、3 があるとします。ここで、x は PK です (したがって、テーブルから外れます)。
y、z、1、2、または 3 のすべての一意の値を取得する必要がありますが、メソッドでどのフィールドを取得するかを必ずしも知る必要はありません。したがって、メソッドのパターンは次のようになります。
public List<ObjectName> GetUniqueFieldValues(string fieldname)
「ObjectName」オブジェクトは 2 つのプロパティを持つオブジェクトで、上記のメソッドは結果ごとに少なくとも 1 つのプロパティを埋めます。
別の質問の誰かが ParameterExpression および Expression クラスを使用して同様の回答をしましたが、特定のタスクに役立つ十分な情報を実際には提供しませんでした。
リフレクションも試しましたが、もちろん、Linq は Select 式内ではあまり好きではありません。
if を使用してそれを良いと呼びますが、実際のテーブル/オブジェクトには実際には大量のフィールド/プロパティがあるため、実用的ではありません。これにより、ベーステーブルが変更された場合でも、リファクタリングを少し節約できます。
私がやろうとしていることのSQLバージョン:
SELECT Distinct [usersuppliedfieldname] from TableName where [someotherconditionsexist]
私がすでに持っているものの疑似コード:
public List<ReturnObject> GetUniqueFieldValues(int FkId, ConditionObject searchmeta)
{
using(DbEntities db = new DbEntities())
{
// just getting the basic set of results, notice this is "Select *"
var results = from f in db.Table
where f.FkId == FkId && [some static conditions]
select f;
// filtering the initial results by some criteria in the "searchmeta" object
results = ApplyMoreConditions(results, searchmeta);
// GOAL - Select and return only distinct field(s) specified in searchmeta.FieldName)
}
}