C# 不要像列表那样尝试遍历C中的元素,您需要使用表达式树,以便生成SQLWHERE子句。我确实实现了BuildUserObjectFromIDataRecord。但唯一的问题是,脚本不需要查找某个用户,而是必须获取所有记录,然后在所有记录中查找必要的记录。 v

C# 不要像列表那样尝试遍历C中的元素,您需要使用表达式树,以便生成SQLWHERE子句。我确实实现了BuildUserObjectFromIDataRecord。但唯一的问题是,脚本不需要查找某个用户,而是必须获取所有记录,然后在所有记录中查找必要的记录。 v,c#,lambda,find,C#,Lambda,Find,不要像列表那样尝试遍历C中的元素,您需要使用表达式树,以便生成SQLWHERE子句。我确实实现了BuildUserObjectFromIDataRecord。但唯一的问题是,脚本不需要查找某个用户,而是必须获取所有记录,然后在所有记录中查找必要的记录。 var user = User.Find(a => a.LastName == "Brown"); public T Find(Predicate<T> match) { if (match == null)


不要像
列表
那样尝试遍历C中的元素,您需要使用表达式树,以便生成SQL
WHERE
子句。我确实实现了BuildUserObjectFromIDataRecord。但唯一的问题是,脚本不需要查找某个用户,而是必须获取所有记录,然后在所有记录中查找必要的记录。
var user = User.Find(a => a.LastName == "Brown");
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);
}
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" });
Predicate<User> Finder = delegate(User user)
{
    return user.LastName == "Brown";
}

var User = User.Find(Finder);
public IEnumerable<T> Get(Expression<Func<T, bool>> condition)
{
    if (condition.Body.NodeType == ExpressionType.Equal)
    {
        var equalityExpression = ((BinaryExpression)condition.Body);

        var column = ((MemberExpression)equalityExpression.Left).Member.Name;

        var value = ((ConstantExpression)equalityExpression.Right).Value;

        var table = typeof(T).Name;

        var sql = string.Format("select * from {0} where {1} = '{2}'", table, column, value);

        return ExecuteSelect(sql);
    }

    return Enumerable.Empty<T>();
}
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" });
public static IEnumerable<User> Find(Predicate<User> match)
{
    //I'm not sure of the name
    using (var cn = new NpgsqlConnection("..your connection string..") )
    using (var cmd = new NpgsqlCommand("SELECT * FROM Users", cn))
    using (var rdr = cmd.ExecuteReader())
    {
        while (rdr.Read())
        {
           var user = BuildUserObjectFromIDataRecord(rdr);
           if (match(user)) yield return user;
        }
    }
}
var users = User.Find(a => a.LastName == "Brown");