首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# -- Lambda块内的解析数据分块.Where()

C# -- Lambda块内的解析数据分块.Where()
EN

Stack Overflow用户
提问于 2022-09-14 12:48:29
回答 4查看 53关注 0票数 0

我想从数据库中过滤实体,但我有点纠结于如何正确地将方法链接在一起.

用户可以从一个Textfield中搜索Id、标题和描述。此SearchString将绑定到SearchString in SearchData中。

我有一个方法:

代码语言:javascript
复制
public List<Movies> Search(SearchData search)
{
    var movies = from m in entities select m;
    if (!String.isNullOrEmpty(search.SearchString))
    {
        movies = movies.Where(x => x.Title.Contains(search.SearchString)).Where(//descritpion);
    }
    return movies;
}

这是可行的,但我也需要检查Id

代码语言:javascript
复制
.Where(x=>x.Id == search.SearchString)

这将无法工作,因为Id是一个int,而SearchString是一个字符串。

我尝试过多种方法来做到这一点:我在SearchString上使用了“SearchString”,在Id上使用了"Convert.ToString“,但是由于某种原因,我在搜索字符串时不会得到任何信息和错误。

我尝试在where:.Where(x => {if(Tryparse(搜索字符串){}){}{}})中使用一个块,但是当我试图返回Movie或null时,它不喜欢它。

我还试图把这一条分开:

代码语言:javascript
复制
if (int.tryparse(searchstring)) 
    movies = movies.where(x=>x.id ==Int32.Parse(SearchString));
movies = movies.where(//title and desc)

,但是有了这个,我在if中找到的所有电影都会因为标题和desc而被过滤掉。

我的问题是:

(1)是否有可能“拆分”这些方法,使其表现为OR而不是AND?或者因为用户只允许输入一个Int或一个字符串,所以在一个工作之后就不再执行它们了。我有更多的价值观,我正在过滤,我也需要这一点。

2)如何对Lambdas中的“复杂”逻辑进行测试?

EN

回答 4

Stack Overflow用户

发布于 2022-09-14 12:58:39

我不确定我是否正确地理解了它,但是如果您想搜索id == search.SearchString,以及使用OR的任何其他条件,那么您应该这样做:

代码语言:javascript
复制
.Where(x=>x.Id == search.SearchString && (x.description.Contains(search.Description) || x.Title.Contains(search.Title) || x.Whatever.Contains(search.Whatever)));
票数 1
EN

Stack Overflow用户

发布于 2022-09-14 12:58:04

您可以在Where子句中使用OR。

代码语言:javascript
复制
public List<Movies> Search(SearchData search)
{
    var movies = from m in entities select m;
    if (!String.IsNullOrEmpty(search.SearchString))
    {
        movies = movies.Where(x => x.Title.Contains(search.SearchString) || x.Description.Contains(search.SearchString));
    }
    return movies;
}
票数 0
EN

Stack Overflow用户

发布于 2022-09-14 13:06:33

我不明白为什么电影标题应该包含电影Id,在我看来,这是不好的做法,

我认为您需要更新SearchData并为Id添加一个单独的字段,并使用它进行筛选,这将使调试变得更加清晰和容易。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73717123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档