【发布时间】:2010-03-08 02:46:52
【问题描述】:
我正在尝试实现搜索数据库的方法 Find。
我忘了说我使用的是 Postgresql,所以我不能使用内置的 LINQ to SQL。
我希望它是这样的:
var user = User.Find(a => a.LastName == "Brown");
就像在 List 类中完成的一样。但是当我查看 List 的源代码(感谢 Reflector)时,我看到了:
public T Find(Predicate<T> match)
{
if (match == null)
{
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.match);
}
for (int i = 0; i < this._size; i++)
{
if (match(this._items[i]))
{
return this._items[i];
}
}
return default(T);
}
我该如何实现这个东西?我需要获取这些参数才能进行搜索。
解决方案
好的,我现在明白了,我需要使用 LINQ to SQL 来完成所有这些好的表达式,否则我将不得不花费大量时间重新实现轮子。
由于我不能使用 LINQ to SQL,所以我实现了这个简单的方法:
public static User Find(User match, string orderBy = "")
{
string query = "";
if (!String.IsNullOrEmpty(match.FirstName)) query += "first_name='" + match.FirstName + "'";
if (!String.IsNullOrEmpty(match.LastName)) query += "last_name='" + match.LastName+ "'";
return Find(query + (!String.IsNullOrEmpty(orderBy) ? orderBy : ""));
}
这是如何使用它:
var user = User.Find(new User { FirstName = "Bob", LastName = "Brown" });
【问题讨论】:
-
在重新实现之前,您可能需要检查 Linq to Sql 或实体框架。
-
请明确说明您希望访问哪些参数。
-
我忘了说我使用的是Postgresql,所以我不能使用内置的LINQ to SQL。
-
如果有人搜索包含 ' 的名称,更新后的代码会发生什么情况?您需要使用正确的查询参数。
-
你说得对,我不在这里做任何检查。这只是原型。