我是c#的新手,所以希望我能在这里给你足够的信息。
我正在尝试返回产品列表,其中产品状态列的值为1.
但是,我一直抓到我的捕获物,然后返回null。
我想为每个产品创建一个列表,但我还没有那么远,目前只是将结果转储到viewdata中。
我遇到的例外情况是: 操作无效...:无法按类型'Davey.Models.GetAllProducts'进行排序。
这是我的代码:
我的模特:(产品型号)
namespace Davey.Models
{
[DataContract]
public class GetAllProducts
{
[DataMember]
public string ID { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public string Desc { get; set; }
[DataMember]
public string Price { get; set; }
[DataMember]
public string Points { get; set; }
[DataMember]
public string Cat { get; set; }
[DataMember]
public string SizeS { get; set; }
[DataMember]
public string SizeM { get; set; }
[DataMember]
public string SizeL { get; set; }
[DataMember]
public string SizeXL { get; set; }
[DataMember]
public int Status { get; set; }
}
}
我的服务(DaveyService.scs)://这是我一直在抓住阻止块的地方
public GetAllProducts[] AllProducts(int status)
{
try
{
using (UserDataDataContext db = new UserDataDataContext())
{
return db.mrobProducts.Where(x => x.Status == status).Select(x => new GetAllProducts { Name = x.Name, Desc = x.Description, Price = x.Price }).OrderBy(x => x).ToArray();
}
}
catch
{
return null;
}
}
我的控制器已被切割到相关部分:
[HttpPost]
[AllowAnonymous]
public ActionResult UserLogin(LoginModel model, UserName usernameModel, GetAllProducts allProductsModel)
{
if (userExists)
{
var webService3 = new DaveyServiceClient();
allProductsModel.Status = 1;
ViewData["products"] = webService.AllProducts(allProductsModel.Status);
return View("../Private/Index");
}
return View("Index");
}
答案 0 :(得分:1)
您正在获得异常,因为您按复杂类型进行排序。请...OrderBy(x=>x.Name)
或您想要排序的任何其他字段。
答案 1 :(得分:1)
问题是您的OrderBy
方法不知道如何按GetAllProducers
排序。
您有两种选择:
IComparable<GetAllProducts>
GetAllProducts
按OrderBy
排序会知道如何排序,例如string
或int
,例如:
using (UserDataDataContext db = new UserDataDataContext())
{
return db.mrobProducts.Where(x => x.Status == status).Select(x => new GetAllProducts
{
Name = x.Name,
Desc = x.Description,
Price = x.Price
}).OrderBy(x => x.Price).ToArray();
}
作为旁注,我通常喜欢在我的catch
子句中指定我捕获的内容,因为你应该总是对你捕获的异常做一些事情,即使它只是记录。我建议你使用像catch (InvalidOperationException e)
这样的特定类型,或者如果你真的需要一般性捕获,那么catch (Exception e)