我在监视窗口中看到以下 LINQ 语句
model.UserLanguages = (from u in db.Users
join l in db.Languages on u.LanguageId equals l.Id
select new {UserName = u.LastName, Language = l.Name}).ToList();
返回
System.Collections.Generic.List<<>f_AnonymousType1<string,string>>
类型的变量。我需要将它分配给模型类的属性,因此我需要能够明确命名其类型。像这样的东西:
public List<{string, string}> UserLanguages { get; set; }
但由于这不是正确的语法,当然,我得到了一个错误。
当我将其设置为:
public List<object> UserLanguages { get; set; }
我收到错误:
The type "System.Collections.Generic.List<<anonymous type: string UserName, string Language>>" cannot be converted to "System.Collections.Generic.List<object>"
最佳答案
你不能那样做,匿名类只是——好吧,匿名——它没有一个你可以在任何地方使用的名字。来自 MSDN :
而只是创建一个命名类,然后创建它的一个实例
class MyClass
{
public string UserName { get; set; }
public string Language { get; set; }
}
现在从您的查询创建此类的实例:
model.UserLanguages = (from u in db.Users
join l in db.Languages on u.LanguageId equals l.Id
select new MyClass {UserName = u.LastName, Language = l.Name}).ToList();
其中
UserLanguages
是 List<MyClass>
。这让您的 API 的任何用户都清楚,最后一个实例中的实例具有 UserName
和 Language
。没有类的另一种方法是使用
Dictionary<string, string>
代替。model.UserLanguages = (from u in db.Users
join l in db.Languages on u.LanguageId equals l.Id
select new MyClass {UserName = u.LastName, Language = l.Name}).ToDictionary(x => x.UserName, x => x.LastName);
但这似乎不太直观,因为用户必须知道
Key
适用于 UserName
,而 Value
是 Language
。关于c# - 如何将变量定义为类型列表<<>f_AnonymousType1<string,string>>,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51305481/