2017-10-10 4 views
1

2つの選択したパラメタを外部から関数に送信しようとしています。どのような私が達成しようとしていますが、私はこのようなモデルを持っている 関数の外で選択パラメータを送信しますか?

の下で簡略化され、

public class Entity 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Surname { get; set; } 
} 

SampleData: 
3/Barrack/Obama 
4/Vladimir/Putin 

とされており、私はこのような関数を作成しようとしている

public class IdTextModel 
{ 
    public string Id { get; set; } 
    public string Text { get; set; } 
} 

別のモデル

public List<IdNameModel> GetList(propselectorA, propselectorB){ 
    return data.Select(x => new IdTextModel(){ 
     Id = propselectorA, 
     Text = propselectorB 
    }); 
} 

使用法:

var list = GetList(x => x.Id, x => x.Surname); 

ExpectedResult: 
3/Obama 
4/Putin 

どうすれば実現できますか?ありがとうございました。

+0

あなたが探しているタイプが 'Expression >'です – juharr

答えて

1

あなたがIdTextの種類から抽象へExpression<Func<Entity,IdNameModel>>を使用することができます。

public List<T> GetList(
    Expression<Func<Entity,T>> selector 
) { 
    return data.Select(selector).ToList(); 
} 

とこのようにそれを呼び出す:2つの文字列プロパティに渡すセレクタを

var list = GetList(x => IdTextModel { Id = x.Id, Name = x.Surname }); 

も可能ですが、使用してZipは効率が悪くなります。

public List<IdTextModel> GetList(
    Expression<Func<Entity,string>> selectorId 
, Expression<Func<Entity,string>> selectorName 
) { 
    return data 
     .Select(selectorId) 
     .Zip(
      data.Select(selectorName) 
     , (id, name) => new IdTextModel { Id = id, Name = name } 
     ).ToList(); 
} 
+0

あなたの素早い答えをありがとうございます。公衆リスト GetListの(式<のFunc >セレクタ ) {VARデータ=新しいリスト()。 return data.Select(selector); } –

+0

@ilkerunal 'data'は新しいリストであってはなりません。私はデータコンテキストを利用できると仮定しているので、 'dataContext.EntityTable.Select(selector).ToList();'のようなものでなければなりません。 – dasblinkenlight

+0

あなたは素晴らしいです。 –

関連する問題