我在监视窗口中看到以下 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();

其中 UserLanguagesList<MyClass> 。这让您的 API 的任何用户都清楚,最后一个实例中的实例具有 UserNameLanguage

没有类的另一种方法是使用 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 ,而 ValueLanguage

关于c# - 如何将变量定义为类型列表<<>f_AnonymousType1<string,string>>,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51305481/

10-17 02:24