为了账号安全,请及时绑定邮箱和手机立即绑定

不同栏目的搜索方法

不同栏目的搜索方法

C#
江户川乱折腾 2023-06-25 13:29:08
我有Form和ComboBox。TextBox第一个包含列名称,第二个包含要搜索的文本。作为来源,ComboBox取自元素。该方法在按下按钮的过程中被调用。ListTypeSearchItemSearchSearch()Search如果给该列一个这样的名称,则什么也找不到EF.Functions.Like(item.Value, ...); // Value = "FullName"如果指定模型中的列,则搜索有效EF.Functions.Like(w.FullName, ...); 是否可以在同一方法中替换应搜索的列Search()?ListTypeSearch.Add(new ItemSearch { Value = "FullName", Display = "some text" });ListTypeSearch.Add(new ItemSearch { Value = "PassportSeries", Display = "some text" });ListTypeSearch.Add(new ItemSearch { Value = "PassportNumber", Display = "some text" });public class ItemSearch{    public string Value { get; set; }    public string Display { get; set; }}internal List<WorkerTableRow> Search(ItemSearch item, string text){    try    {        Found = new List<WorkerTableRow>();        using (ModelContext model = new ModelContext())        {            Found = (from w in model.Workers                     where EF.Functions.Like(w.FullName, // this code                                             String.Format("%{0}%", text))                     select new WorkerTableRow                     {                         ...                     })                     .ToList();        }    }    catch (Exception ex) { ... }    return Found;}更新现在我确实喜欢这样了。其作品。这可以简化吗?where EF.Functions.Like(w.GetProperty(item.Value),                         String.Format("%{0}%", text))public partial class Workers{    ...    public string FullName { get; set; }    public string PassportSeries { get; set; }    public string PassportNumber { get; set; }    public string GetProperty(string name)    {        switch (name)        {            case "FullName":                return FullName;            case "PassportSeries":                return PassportSeries;            case "PassportNumber":                return PassportNumber;            default:                return string.Empty;        }    }}
查看完整描述

1 回答

?
GCT1015

TA贡献1827条经验 获得超4个赞

如果使用Like(w.GetProperty(item.Value), ...),则请求在客户端上执行,而不是在服务器上执行。要将整个请求发送到服务器,您可以执行以下操作:

List<WorkerTableRow> Search(ItemSearch item, string text)

{

    string pattern = string.Format("%{0}%", text);


    using (var model = new ModelContext())

    {

        IQueryable<Worker> query = model.Workers;


        if (item.Value == "FullName")

            query = query.Where(w => EF.Functions.Like(w.FullName, pattern));


        if (item.Value == "PassportSeries")

            query = query.Where(w => EF.Functions.Like(w.PassportSeries, pattern));


        if (item.Value == "PassportNumber")

            query = query.Where(w => EF.Functions.Like(w.PassportNumber, pattern));


        return query.Select(w => new WorkerTableRow { ... }).ToList();

    }

}


查看完整回答
反对 回复 2023-06-25
  • 1 回答
  • 0 关注
  • 117 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信