0

NDatabaseを使用IEnumerable<T>していますが、ベース データ アクセス レイヤー ( ) を使用して取得しているをバインドしようとすると問題が発生しBaseDALます。

public IEnumerable<T> GetMany<T>()
{
  using(var odb = OdbFactory("Example.db"))
  {
    return odb.AsQueryable<T>().ToList();
  }
}

T私の場合はEmployeeです。

public interface IEmployee
{
  string Username { get; set; }
  List<UserConfiguration> ConfigurationList { get; set; }  
}

基本的にList<Employee>、グリッドにバインドするために使用できる が必要です (現在、それを取得していますthe underlying datasource doesn't support editing)。

何らかの方法で を実装する必要があることはわかっていますがIBindingList、この実装は巨大です! 誰かが私を正しい方向に向けることができるかどうか疑問に思っていましたか? それとも、次の行に沿って進む必要がありますか?

public class BindableList<T> : IObjectSet<T>, IBindingList {}

ありがとう!

NDatabase IObjectSet 構造体

public interface IObjectSet<TItem> : ICollection<TItem>, IEnumerable<TItem>, IEnumerable
{
  TItem GetFirst();
  bool HasNext();
  TItem Next();
  void Reset();
}
4

2 に答える 2

1

愚かな私...

BindingList<T>

上記は のコンストラクターを使用するため、メソッドを次のIListように変更するだけです。BaseDAL

public IEnumerable<T> GetMany<T>()
{
  using(var odb = OdbFactory("Example.db"))
  {
    return new BindingList<T>(odb.AsQueryable<T>().ToList());
  }
}
于 2013-01-28T12:18:29.353 に答える
0

あなたが書いたコードはこのように改善されるかもしれません:

public IEnumerable<T> GetMany<T>()
{
  using(var odb = OdbFactory("Example.db"))
  {
    return new BindingList<T>(odb.QueryAndExecute<T>().ToList());
  }
}

このコードは、この場合に必要のないすべてのLinq to NDatabaseのもの(ラッパー)を使用しているわけではありません。

于 2013-02-07T06:54:46.137 に答える