簡體   English   中英

C#Linq使用字段名作為變量查詢數據庫

[英]C# Linq Query on database using field name as a variable

這是我的代碼。 任何人都可以幫我重構這段代碼。 我正在嘗試使用字段名稱作為變量,所以我不必使用switch case。 有點像dr in db.Users where dr.FieldName.Contains(value)

public static List<User> GetUser(string value, string fieldName)
{
    var db = new CCPTDataContext();
    var users = new List<User>();

    switch (fieldName)
    {
        case "FirstName":
            users = (from dr in db.Users where dr.FirstName.Contains(value)
                     select new User
                     {
                         Username = dr.Username,
                         FirstName = dr.FirstName,
                         LastName = dr.LastName
                     }).ToList();

            break;
        case "LastName":
            users = (from dr in db.Users where dr.LastName.Contains(value)
                     select new User
                     {
                         Username = dr.Username,
                         FirstName = dr.FirstName,
                         LastName = dr.LastName
                     }).ToList();
            break;
    }
    return users;
}

您必須使用System.Linq.Expression命名空間中的類手動創建表達式樹:

public static Expression<Func<TSource, bool>> GetPropertyContainsValueExpression<TSource>(string propertyName, string value)
{
    var param = Expression.Parameter(typeof(TSource), "x");
    var prop = Expression.Property(param, propertyName);
    var valueExp = Expression.Constant(value, typeof(string));
    var contains = Expression.Call(prop, "Contains", null, valueExp);
    return Expression.Lambda<Func<TSource, bool>>(contains, param);
}

然后你就可以這樣使用它:

public static List<User> GetUser(string value, string fieldName)
{
    var db = new CCPTDataContext();

    return db.Users.Where(GetPropertyContainsValueExpression<User>(fieldName, value)).ToList();
}

這應該工作:

users = (from dr in db.Users 
where (fieldName.Equals("FirstName") && dr.FirstName.Contains(value))
      || (fieldName.Equals("LastName") && dr.LastName.Contains(value))
                 select new User
                 {
                     Username = dr.Username,
                     FirstName = dr.FirstName,
                     LastName = dr.LastName
                 }).ToList();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM