c# - Linq查询 - 继续捕获

时间:2014-08-10 17:48:18

标签: c# asp.net asp.net-mvc linq

我是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");
}

2 个答案:

答案 0 :(得分:1)

您正在获得异常,因为您按复杂类型进行排序。请...OrderBy(x=>x.Name)或您想要排序的任何其他字段。

答案 1 :(得分:1)

问题是您的OrderBy方法不知道如何按GetAllProducers排序。

您有两种选择:

  1. IComparable<GetAllProducts>
  2. 中实施GetAllProducts
  3. OrderBy排序会知道如何排序,例如stringint,例如:

    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();
     }
    
  4. 作为旁注,我通常喜欢在我的catch子句中指定我捕获的内容,因为你应该总是对你捕获的异常做一些事情,即使它只是记录。我建议你使用像catch (InvalidOperationException e)这样的特定类型,或者如果你真的需要一般性捕获,那么catch (Exception e)