【问题标题】:Asp.net Search function issuesAsp.net 搜索功能问题
【发布时间】:2019-01-24 00:01:43
【问题描述】:

我有一个简单的搜索功能,可以让我从不同的表格中搜索某些单词。 这很烦人,因为我觉得这里没有看到一个简单的修复方法。有人可以帮忙吗?提前谢谢你。

视图模型

IEnumerable<Owner> Owners {get; set;}
IEnumerable<Car> Cars {get; set;}

搜索方法

public IEnumerable<ViewModel> Search(string search)
 {
   ViewModel searchVM = new ViewModel();

   return searchVM.Owner.Where(o => o.Name.Contains(search)) || 
          searchVM.Cars.Where(c => c.Model.Contains(search));
 }

错误

Operator '||' cannot be applied to operands of type 'IEnumerable<Owner>' and 
'IEnumerable<Car>'

【问题讨论】:

  • 你的结构很混乱。 searchVM 中的属性填充了什么?它们是否在构造函数中填充了所有可能的数据?您期望该方法返回什么? ViewModel 的单个实例,还是 ViewModels 的集合?
  • 那么返回方法应该是一个字符串。例如,我会搜索一个模型,然后我会得到一个与搜索参数相关联的模型集合。
  • 构建这个的正确方法是什么?
  • 您有具有Owners 和Cars 属性的ViewModel 类? searchVM 的类型是什么?视图期望的模型类型是什么?

标签: c# asp.net linq search


【解决方案1】:

你的结构非常很奇怪。但它看起来好像你想要的只是ViewModel 的一个实例,每个属性都由搜索字符串过滤。

(注意:绝对不清楚您的 ViewModel 在哪里填充其属性。您是否只是将整个数据存储转储到其构造函数中?这似乎......不太理想。 但至于被问到的问题......)

大概是这样的:

public ViewModel Search(string search)
{
    ViewModel searchVM = new ViewModel();

    searchVM.Owner = searchVM.Owner.Where(o => o.Name.Contains(search));
    searchVM.Cars = searchVM.Cars.Where(c => c.Model.Contains(search));

    return searchVM;
}

再次,我强烈怀疑您在这里没有完全理解您自己的数据结构。不过,根据我们在问题中的信息,这看起来像是您正在尝试做的事情。

【讨论】:

  • 感谢大卫的及时回复。数据被转储到构造函数中。我正在使用存储库模式。这会有帮助吗?
  • @ChrisH.:好吧,如果您希望所有数据默认都在视图模型中,然后根据搜索输入过滤属性,那么我想这就是您的方式去做吧。
  • 是的,这是最初的想法。我仍然在这里学习绳索。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2016-12-25
  • 1970-01-01
  • 2015-09-08
  • 1970-01-01
  • 2023-03-05
  • 2023-01-20
  • 1970-01-01
  • 2011-07-02
相关资源
最近更新 更多