我有一个具有某些属性的IList。 我从数据库访问一组值返回IList的代码。 我使用了一个webservice,它将完整的细节提供给列表。 作为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>'
”
webservice中的代码是。
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;
}
如何从客户端访问此代码。我无法提取任何相关的在线参考。
答案 0 :(得分:6)
我从您的错误消息中注意到的一件事是它明确指出:
无法隐式将
'Model.BrandInfo[]'
类型转换为'System.Collections.Generic.IList<Models.BrandInfo>'
Model.BrandInfo
与单独项目中定义的Models.BrandInfo
不同。编译器不会以这种方式确定等价。你必须在一个项目中声明它并在另一个项目中引用它,否则你必须自己编写一个mapper。
像
这样的东西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.
}
或者你应该尝试一些自动化这种映射的库,如AutoMapper或ValueInjecter
答案 1 :(得分:4)
您可以使用ToList
方法执行此操作:
public IList<BrandInfo> SearchProduct(string name)
{
AuthenicationServiceClient obj = new AuthenicationServiceClient();
return obj.SearchProducts(name).ToList();
}
请记住,它需要文件顶部的using System.Linq
。
或者您可以更改WCF配置以将集合反序列化为列表而不是数组。
如果您使用添加服务参考,您应该执行以下操作:
System.Collections.Generic.List