【问题标题】:Loop through IEnumerable Using Array MVC使用数组 MVC 循环遍历 IEnumerable
【发布时间】:2015-08-22 19:38:31
【问题描述】:

一直在为此苦苦挣扎,不知道如何实施。似乎很容易。

我有一个包含多个关键字的搜索框。然后,我将这些关键字传递给我的存储库中的 IENumerable 方法。

public IEnumerable<diss> GetDissSearch(string b)

然后我将关键字放入数组 - b 包含单词字符串并使用拆分方法。

string[] sArray = strSearchString.Split();

然后我使用 foreach 循环来遍历我的数组中的单词,但在我的 foreach 循环中,我将 linq 语句放置如下:

foreach(string s in sArray){

var myLoop = (from p in mytable
              where p.userFirstName.Contains(s)
              && p.lastName.Contains(s)
              select new myModel {
              firstName = p.userFirstName,
              lastName = p.userLastName
              }).ToList();

return myLoop;

}

因此,如果用户输入两个词 - 例如,名字和姓氏,您希望该集合会被调用两次。同样,如果用户输入中间名,则集合将被调用 3 次。目前,这个集合只运行一次。

有没有办法根据我的数组中包含的关键字数量多次调用这个 ienumerable?

谢谢。

【问题讨论】:

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


    【解决方案1】:

    使用Any(或All,如果您希望所有sArray 术语都存在)包装搜索查询,例如。方法,这样每个 DB 行将只针对数组评估一次:

    var myLoop = (from p in mytable
                  where sArray.Any(sa => p.userFirstName.Contains(sa)
                  && p.lastName.Contains(sa))
                  select new myModel
                  {
                    firstName = p.userFirstName,
                    lastName = p.userLastName
                  }).ToList();
    

    此外,如果您希望字词在姓氏中,请考虑将查询中的&amp;&amp; 运算符替换为||。 p>

    【讨论】:

    • 这太棒了!非常感谢,是的,&& 是一个错字。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-12
    • 2019-08-13
    • 2013-11-23
    • 1970-01-01
    • 1970-01-01
    • 2014-06-04
    相关资源
    最近更新 更多