Можно ли сгладить отношения один ко многим с помощью динамического LINQ?
Например, у меня может быть список Users, а класс User содержит список многих UserPreferences. Класс UserPreference по сути является парой имя / значение.
Пользователь будет определять, какие типы пользовательских настроек доступны для группы пользователей.
public class User
{
public string FirstName
{
get;
set;
}
public string LastName
{
get;
set;
}
public IList<UserPreference> UserPreferences
{
get;
set;
}
}
public class UserPreference
{
public UserPreference(string name, object userValue)
{
this.Name = name;
this.UserValue = userValue;
}
public string Name
{
get;
set;
}
public object UserValue
{
get;
set;
}
}
Поэтому одну группу пользователей можно определить следующим образом:
List<User> users = new List<User>();
User user1 = new User();
user1.FirstName = "John";
user1.LastName = "Doe";
user1.UserPreferences.Add(new UserPreference("Favorite color", "Red"));
User user2 = new User();
user2.FirstName = "Jane";
user2.LastName = "Doe";
user2.UserPreferences.Add(new UserPreference("Favorite mammal", "Dolphin"));
user2.UserPreferences.Add(new UserPreference("Favorite color", "Blue"));
users.Add(user1);
users.Add(user2);
return users;
Желаемый результат будет:
First Name Last Name Favorite Color Favorite Mammal
John Doe Red NULL
Jane Doe Blue Dolphin
Есть ли способ создать анонимный тип, чтобы UserPreferences попадал в пользователя?
Например,
var u = UserScopedSettingAttribute.Select("new (FirstName as FirstName, UserValue as FavoriteColor)", null);
string name = u.FirstName;
string color = u.FavoriteColor;
В конечном итоге этот список пользователей будет связан с веб-элементом управления ASP.NET GridView. В эту операцию будет вовлечен большой объем данных, и производительность будет критической.
Любые предложения приветствуются!