gpt4 book ai didi

c# - 搜索实体的所有字段

转载 作者:可可西里 更新时间:2023-11-01 07:56:31 24 4
gpt4 key购买 nike

我正在尝试对客户数据库实现“多功能框”类型的搜索,其中单个查询应尝试匹配客户的任何属性。

这里有一些示例数据来说明我正在努力实现的目标:

FirstName  | LastName  | PhoneNumber | ZipCode | ...
--------------------------------------------------
Mary | Jane | 12345 | 98765 | ...
Jane | Fonda | 54321 | 66666 | ...
Billy | Kid | 23455 | 12345 | ...
  • 如果查询是“Jane”,我希望返回第 1 行和第 2 行。
  • 12345 的查询将生成行 #1 和 #3。

现在,我的代码看起来很像这样:

IEnumerable<Customer> searchResult = context.Customer.Where(
c => c.FirstName == query ||
c.LastName == query ||
c.PhoneNumber == query ||
c.ZipCode == query
// and so forth. Fugly, huh?
);

这显然有效。不过,这对我来说确实是一种糟糕的做法,因为实体中的任何更改(删除属性、引入新属性)都会破坏内容。

那么:是否有一些 LINQ-foo 可以搜索我抛给它的任何实体的所有属性?

最佳答案

首先在 Customer 类中找到与查询相同类型的所有属性:

var stringProperties = typeof(Customer).GetProperties().Where(prop =>
prop.PropertyType == query.GetType());

然后从具有至少一个属性值等于查询的上下文中找到所有客户:

context.Customer.Where(customer => 
stringProperties.Any(prop =>
prop.GetValue(customer, null) == query));

关于c# - 搜索实体的所有字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12844779/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com