3

これは SL/WPF アプリケーションで、2 つの列を表示しようとしています。次のコード:

MyDomainContext context = new MyDomainContext();
dataGrid1.ItemsSource = context.DBTables;
context.Load(context.GetTwoDataBasesQuery())

;

domainservice.cs には、次のようなメソッド定義が含まれています。

public IQueryable<DBTable>GetTwoDataBases()
  {
    return this.ObjectContext.DBTables;
  }

このコードは正常に動作しますが、コンテキスト内のすべての列を返します。2 つの列のみを返す必要があるため、変更は次のとおりです。

public IQueryable<DBTable>GetTwoDataBases()
  {
      //trying to return columns
      return GetDBTables().Select(m => new { m.col1, m.col2 });                           
  }

しかし、コンパイラはエラーを生成し、「リターン」を受け入れません。

次のエラー型 'System.Linq.IQueryable' を 'System.Linq.IQueryable' に暗黙的に変換できません。明示的な変換が存在します。

2つの列のみを返す方法は? X よりも多い

4

1 に答える 1

1

匿名型を返していますが、コレクションの戻り値の型は ですDBTable。戻り値の型を作成objectするか、新しいクラスを定義しclassてそのクラスのオブジェクトを作成できます。

オブジェクトを戻り型にする

public object GetTwoDataBases()
{
     //trying to retrun columns
     return GetDBTables().Select(m => new { m.col1, m.col2 });    
}

または、匿名型の代わりに IQueryable を返す

public IQueryable<YourCustomType>GetTwoDataBases()
{
     //trying to retrun columns
     return GetDBTables()
            .Select(m => new YourCustomType { YourCustomTypeProperty1 = m.col1, YourCustomTypeProperty2 = m.col2 });    
}
于 2013-10-02T04:05:58.243 に答える