2011-10-15 17 views
1

私はこのCombine several similar SELECT-expressions into a single expressionと非常によく似た何かを実装したいと思いますが、私の場合はコードが機能しません。式を組み合わせて選択

2つのkeySelectors(プロパティ)を渡したいと思います。それらを組み合わせてEF 4.1 selectクエリに使用したいと思います。ただ、一例として

は、以下のコードを参照してください。

public class Category 
{ 
    public int CategoryId { get; set; } 
    [Required(ErrorMessage = "Name required.")] 
    [StringLength(25, ErrorMessage = "Must be less than 25 characters.")] 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public DateTime? CreateDateTime { get; set; } 
} 

public class SampleContext : DbContext 
{ 
    public SampleContext() : base("Sketch7.Sample") { } 

    public DbSet<Category> Categories { get; set; } 
} 

public static class Repository 
{ 

    public Dictionary<TKey, TKeyValue> GetKeyValue<TKey, TKeyValue>(Expression<Func<TEntity, TKey>> keySelector, Expression<Func<TEntity, TKeyValue>> valueKeySelector) 
    { 
     var combined = //ToDo Select Combine here... 

     SampleContext db = new SampleContext(); 
     var result = db.Categories.Select(combined); 
     ... 
     return dictionary; 
    } 
} 

使い方

public void GetKeyValueTest() 
{ 
    Repository.GetKeyValue(x => x.Id , x => x.Name); 
} 

は、誰も私を助けてくださいことができます!あなたがこれを行うことができます

+0

「私の場合はコードが機能しません」エラーの説明は何ですか? – ebb

+0

私はあなたがよりよく理解でき、自分のシナリオをテストできるようにコードを更新しました。 (私はそのサンプルをテストしませんでしたが、うまくいくはずです)。ありがとうございます –

答えて

0

public Dictionary<TKey, TKeyValue> GetKeyValue<TKey, TKeyValue> 
    (Func<Category, TKey> keySelector, 
    Func<Category, TKeyValue> valueKeySelector) 
{ 
    var combined = //ToDo Select Combine here... 

    SampleContext db = new SampleContext(); 
    var result = db.Categories.Select(combined); 
    ... 
    return result.ToDictionary(keySelector, valueSelector); 
} 

注:

  1. TEntity
  2. ToDictionaryを通過したか、具体的にしなければならないことは、唯一のデリゲートを表現を受け付けません。
+0

方法のための@レッピーが、私の望むものではありません。私は選択するkeySelectorsを組み合わせたかったので、データベースから2つのフィールドだけを選択します。 –

0

私は実装を変更しました。選択式を組み合わせたのではなく、このようにしました。少し異なるシナリオですが、あなたがそのアイデアを得ることを願っています。

public class KeyValue<TKey, TValue> 
{ 
    public TKey Key { get; set; } 
    public TValue Value { get; set; } 
} 

public Dictionary<TKey, TValue> GetKeyValue<TKey, TValue>(Expression<Func<TEntity, KeyValue<TKey, TValue>>> keySelector) 
{ 
    return _dbset.Select(keySelector).ToDictionary(x => x.Key, x => x.Value); 
} 

public Dictionary<int, string> GetIndustriesKeyValue() 
{ 
    return IndustryRepository.GetKeyValue(x => new KeyValue<int, string> {Key = x.Id, Value = x.Name}); 
} 
関連する問題