3

特定のプロパティを持つ IList があります。データベースから一連の値にアクセスして、IList を返すコードにアクセスします。リストに完全な詳細を提供するWebサービスを使用しました。WCF であるサービスは、WCFTestClient.exe で適切に実行されます。ただし、コードビハインドでは、配置時にエラーが表示されます。

public IList<BrandInfo> SearchProduct(string name)
{
    AuthenicationServiceClient obj = new AuthenicationServiceClient();
    return obj.SearchProducts(name); 

}

エラー " Cannot implicitly convert type 'Model.BrandInfo[]' to 'System.Collections.Generic.IList<Models.BrandInfo>'"が表示されています

Web サービスのコードです。

public IList<BrandInfo> GetBrandByQuery(string query)
{
    List<BrandInfo> brands = Select.AllColumnsFrom<Brand>()
        .InnerJoin(Product.BrandIdColumn, Brand.BrandIdColumn)
        .InnerJoin(Category.CategoryIdColumn, Product.CategoryIdColumn)
        .InnerJoin(ProductPrice.ProductIdColumn, Product.ProductIdColumn)
        .Where(Product.EnabledColumn).IsEqualTo(true)
        .And(ProductPrice.PriceColumn).IsGreaterThan(0)
        .AndExpression(Product.Columns.Name).Like("%" + query + "%")
        .Or(Product.DescriptionColumn).Like("%" + query + "%")
        .Or(Category.CategoryNameColumn).Like("%" + query + "%")
        .OrderAsc(Brand.NameColumn.ColumnName)
        .Distinct()
        .ExecuteTypedList<BrandInfo>();

    // Feed other info here
    // ====================
    brands.ForEach(delegate(BrandInfo brand)
    {
        brand.Delivery = GetDelivery(brand.DeliveryId);
    });

    return brands;
}

クライアント側からこのコードにアクセスするにはどうすればよいですか。これに関連するオンライン参照を抽出できませんでした。

4

2 に答える 2

6

あなたのエラーメッセージから私が気付くことの1つは、それが明確に述べていることです:

'Model.BrandInfo[]'タイプを暗黙的に変換することはできません'System.Collections.Generic.IList<Models.BrandInfo>'

Model.BrandInfoModels.BrandInfo別のプロジェクトで定義されているものとは異なります。コンパイラは、そのような方法で等価性を判断しません。1 つのプロジェクトで宣言して別のプロジェクトで参照するか、自分でマッパーを作成する必要があります。

何かのようなもの

public IList<BrandInfo> SearchProduct(string name)
{
    AuthenicationServiceClient obj = new AuthenicationServiceClient();
    return obj.SearchProducts(name).Select(Convert).ToList(); 
}

public Models.BrandInfo Convert(Model.BrandInfo x)
{
    //your clone work here. 
}

または、 AutoMapperValueInjecterなど、このマッピングを自動化するライブラリを試してください。

于 2013-11-04T06:42:35.037 に答える
4

メソッドを使用してそれを行うことができますToList

public IList<BrandInfo> SearchProduct(string name)
{
    AuthenicationServiceClient obj = new AuthenicationServiceClient();
    return obj.SearchProducts(name).ToList();
}

using System.Linqファイルの先頭に必要になることに注意してください。

または、WCF 構成を変更して、コレクションを配列ではなくリストとして逆シリアル化することもできます。

Add service referenceを使用する場合は、次の操作を行う必要があります。

  • サービス参照を右クリックし、[ Configure Service Reference ] を選択します。
  • [コレクション タイプ] ドロップダウンで、正しいタイプを選択します。System.Collections.Generic.List
于 2013-11-04T06:22:12.820 に答える