【问题标题】:ASP.NET MVC: How to search decimal value?ASP.NET MVC:如何搜索十进制值?
【发布时间】:2016-02-25 19:20:20
【问题描述】:

我的表格有 5 列:

public partial class NPG_Chemical_DOT_and_Guide_Numbers
{
    [Key]
    [Column(TypeName = "numeric")]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public decimal NPG_Chemical_DOT_and_Guide_Numbers_ID { get; set; }

    [Column(TypeName = "numeric")]
    public decimal NPG_Chemical_ID { get; set; }

    [StringLength(64)]
    public string DOT_Number { get; set; }

    public string Guide_Number { get; set; }

    [StringLength(128)]
    public string Conditional { get; set; }
}

现在我可以使用以下方法在表格中搜索文本值:

public ActionResult Index(string searchString)
    {
        var search = from m in db.NPG_Chemical_DOT_and_Guide_Numbers
                     select m;
        if (!String.IsNullOrEmpty(searchString))
        {
            search = search.Where(s => s.DOT_Number.Contains(searchString) || s.Guide_Number.Contains(searchString) ||s.Conditional.Contains(searchString));
        }
        return View(search);
}

和:

<p>
@using (Html.BeginForm())
{
<p>
    Title: @Html.TextBox("SearchString")
    <input type="submit" value="Search" />
</p>
}
</p>

问题是如何搜索十进制值?我尝试使用转换为字符串,但显示 LINQ 错误。

【问题讨论】:

  • 十进制值是什么意思?你面临什么错误?
  • 前两列是十进制类型而不是字符串类型,所以我无法使用以下方法搜索它们: if (!String.IsNullOrEmpty(searchString)) { search = search.Where(s=>s.DOT_Number .Contains(searchString)) }
  • Layla,您可以查看@YazanAti 发布的答案或我在上述评论中提供的其他答案,如果这些答案对您不起作用,请告诉我们。
  • 您的目标是什么 EF 版本?

标签: asp.net asp.net-mvc linq asp.net-mvc-4


【解决方案1】:

您可以使用SqlFunctions.StringConvert。 int 没有重载,因此您需要转换为双精度或小数。你的代码最终看起来像这样:

var items = from c in contacts
            select new ListItem
            {
                Value = SqlFunctions.StringConvert((double)c.ContactId).Trim(),
                Text = c.Name
            };

【讨论】:

  • 多值怎么做?我应该改变什么:if(!String.IsNullOrEmpty(searchString))?
【解决方案2】:

试试这个解决方案

String SearchWord = "500.4";    
decimal searchBy; //define a decimal variable to hold the Search By value
decimal.TryParse(SearchData, out searchBy); //try parse it to decimal from string

在您的查询中执行以下操作:

Employees = _entities.Employees.Where(p.Salary==searchBy)).ToList();

【讨论】:

    【解决方案3】:

    与搜索字符串完全一样,但有一些变化:

    public ActionResult Index(string searchString){
        searchString = searchString.Replace(',', '.');
    
        var search = from m in db.NPG_Chemical_DOT_and_Guide_Numbers
                     select m;
    
        if (!String.IsNullOrEmpty(searchString)){
            search = search.Where(s => (s.DOT_Number.ToString()).Contains(searchString)
                     || (s.Guide_Number.ToString()).Contains(searchString)
                     || s.Conditional.Contains(searchString));
        }
        return View(search);
    }
    

    使用此代码行: (s.DOT_Number.ToString()).Contains(searchString) 您可以搜索该列,但符号 . 而不是 ,

    上面的 Replace 函数可用于舒适的搜索,而不会注意到 ,. 之间的变化

    因此您可以使用符号, 进行搜索,而不会注意到程序在后台替换它(用户友好版本)

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 2023-03-25
      • 2019-10-23
      • 1970-01-01
      • 1970-01-01
      • 2013-05-07
      • 1970-01-01
      • 2018-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多