【问题标题】:IQueryable convert int to string - sortOrder and FiltringIQueryable 将 int 转换为字符串 - 排序顺序和过滤
【发布时间】:2017-11-09 01:31:07
【问题描述】:

int'不包含'Contains'的定义,最好的扩展方法重载'Queryable.Contains(IQueryable, string)'需要'IQueryable'类型的接收器

这是控制器的部分代码:

        var projects = db.Projects.Include(p => p.Engineer).Include(p => p.SiteLocation);

        // var projects = from p in db.Projects
        //  select p;

        if (!String.IsNullOrEmpty(searchString))
        {
            projects = projects.Where(p => p.NumberMCP.Contains(searchString)
            || p.nameProject.Contains(searchString) ||
            p.Ptype.Contains(searchString) || p.EngineerID.Contains(searchString));
        }

项目模型

public partial class Project
{
    public int ProjectID { get; set; }
    [DisplayName("MCP")]
    [Required(ErrorMessage = "NumberMCP es requerido")]
    public string NumberMCP { get; set; }
    [DisplayName("Ingeniero")]
    [Required(ErrorMessage = "Tarjeta Ingeniero es requerido")]
    public int EngineerID { get; set; }
    [DisplayName("Localidad")]
    [Required(ErrorMessage = "ID Localidad  es requerido")]
    public int SiteLocationID { get; set; }
    [DisplayName("Descripción")]
    [Required(ErrorMessage = "Descripción es requerido")]
    public string nameProject { get; set; }
    [DisplayName("Tipo Proyecto")]
    [Required(ErrorMessage = "Tipo Proyecto es requerido")]
    public string Ptype { get; set; }
    [DisplayName("Año")]
    [Required(ErrorMessage = "Año es requerido")]
    public Nullable<int> Pyear { get; set; }
    [DisplayName("Link del Proyecto")]
    [Required(ErrorMessage = "Link del Proyecto")]
    public string Plink { get; set; }

    public virtual Engineer Engineer { get; set; }
    public virtual SiteLocation SiteLocation { get; set; }
}

}

【问题讨论】:

  • 可以添加Projects的模型吗?
  • 是的,当然。
  • @Chris Pratt 的解决方案看起来很准确。你有什么问题吗?
  • 是的。仍然。 “int”不包含“包含”的定义,最佳扩展方法重载“Queryable.Contains(IQueryable, string)”需要“IQueryable”类型的接收器。
  • 你能举几个例子来说明搜索字符串的值可以是什么吗?如果可能,请更新问题。

标签: c# asp.net-mvc iqueryable


【解决方案1】:

使用int.TryParse 并将整数与整数进行逐字比较:

if (!String.IsNullOrEmpty(searchString))
{
    int searchInt = 0;
    var isInt = int.TryParse(searchString, out searchInt);

    projects = projects.Where(p =>
           (isInt && p.NumberMCP == searchInt) ||
           (!isInt && p.nameProject.Contains(searchString)) ||
           (!isInt && p.Ptype.Contains(searchString)) || 
           (isInt && p.EngineerID == searchInt)
    );
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-24
    • 2012-01-07
    • 1970-01-01
    • 2010-11-13
    • 1970-01-01
    相关资源
    最近更新 更多