我尝试在Visual Studio中使用LINQ进行搜索。在我的数据库中,我有三个字段“Firstname”、“LastNamePrefix”和“Lastname”。我的搜索字符串是Searchtext。我如何进行一个简单的LINQ查询来搜索所有字段?
我现在的想法是:
query = query.Where(x => x.FirstName.Contains(input.SearchText) || x.LastNamePrefix.Contains(input.SearchText) || x.LastName.Contains(input.SearchText));
有了这个,我真的很接近解决方案,但当我试图合并名字与姓氏前缀和姓氏,我没有得到任何结果。
例如,Jan货车Lauw这个名字:
I search Jan. It works
I search van. It works
I search Lauw. It works
I search Jan van Lauw. No results.
我尝试使用以下函数创建一个列,将三列组合为一个全名:
public static string CreateFullname(string firstName, string lastNamePrefix, string lastName)
{
return $"{firstName} {lastNamePrefix} {lastName}".Replace(" ", " ").Trim();
}
如果我尝试像下面的代码那样使用此列,我会得到以下错误:
LINQ to Entities中不支持指定的类型成员“FullName”。仅支持初始值设定项、实体成员和实体导航属性。
query = query.Where(x => x.FullName.Contains(input.SearchText));
如何在多列中搜索?
3条答案
按热度按时间bmp9r5qi1#
不能在查询中使用自定义(未Map)属性(如
FullName
),但可以内联合并属性:cczfrluj2#
使用计算属性时,LINQ to entities无法生成查询。请尝试在查询中使用就地字符串串联。
我不确定LINQ to Entities是否能够将此表达式转换为SQL“like”查询,但我在Entity Framework中使用了这种方法。
您可以仅合并两个OR查询,以使搜索更加灵活:
flvtvl503#
您建议将名称合并为全名并删除""的建议是错误的,原因如下:
您希望的结果为false,因为First Name或LastNamePrefix和LastName中没有'abc',但在您的建议中,它将被接受。
如果按3个参数搜索,则必须比较这些参数