Linq中关键字Key的作用是什么?

3

linq中的key有什么作用?我不确定它的目的是什么?它是做什么的?它如何影响代码运行的方式?

else if (statType.Equals("Stat07"))
{
    //Score Stats by School

    {
        q = from t in dbsRound
            orderby t.RoundNumber
            group t by t.Contestant.School into g
            select new
            {
                School = g.Key,
                MaxScore = (from gr in g select gr.ScoreTotal).Max(),
                MinScore = (from gr in g select gr.ScoreTotal).Min(),
                AverageScore = (from gr in g select gr.ScoreTotal).Average()
            };
        GvStats.DataSource = q.ToList<dynamic>();

    }
}

2
它告诉您“分组”数据的属性。当您使用group by子句或方法语法中的GroupBy时,它会返回一个IEnumerable<TKey,T>,其中TKey是您应用分组的属性类型。 - Rahul Singh
你已经按某个标准对数据进行了分组,例如按学校分组,因此键包含学校名称。 - DavidG
关键是在“group”方法中使用的对象。它可用于生成键为第一个字符串的字典对象Dictionary<string,string>。 - jdweng
1个回答

3

关键是你的组中共同的东西。

例如,如果你有一系列单词并想按它们的首字母分组,那么你就有了一个以字母'a'开头的单词组,以及一个以字母'b'开头的单词组等等。

或者,如果你将单词序列分成具有相同字符数的单词组,那么你就会得到一个只有一个字符的单词组,一个有两个字符的单词组,一个有三个字符的单词组等等。

关键是你用来分组的东西。所以,当你按字符数进行分组时,关键是单词的第一个字母或单词的长度。

你可以使用关键字来识别组。因此,如果你想要以字母'h'开头的单词组,就说你想要在你的组序列中具有关键字等于'h'的元素。如果你按字符数进行分组,你可以要求关键字为4的组以获得所有四个字母的单词。

组关键字是唯一的。你可以确定只有一个这样的元素,因此你可以要求第一个(或默认值,如果没有这样的组)。

例子:下载荷马的《伊利亚特》一书,并将结果拆分成单词序列:

var uri = "http://www.gutenberg.org/files/6130/6130-0.txt";
var iliadWords = new String(
     new WebClient().DownloadString(uri)
        .Select(token => char.IsLetter(token) ? token : ' ')
        .ToArray())
        .Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

var wordsGroupedByFirstLetter = iliadWords
    .GroupBy(word => word.FirstOrDefault());

IEnumerable<string> allWordsStartingWithX = wordsGroupedByFirstLetter
    .FirstOrDefault(group => group.key == 'X');

1
非常好的解释。总之,“Key”只是一个变量名,代表整个分组的东西。与我来自的SQL世界不同,LINQ是面向对象的,一切都是对象、属性、方法等等。为了引用分组内部的某些内容,我们必须在语法上使用“Key.”。问题是,我见过GroupBygroup xyz by。有什么区别? - Jeb50
2
Linq有两种语法:方法语法,其中每个函数都是一个方法,以及查询语法,使用多个关键字。那些梦想使用面向对象语言的人更喜欢方法语法,而那些来自数据库查询世界(如SQL)的人更熟悉查询语法。请参见https://msdn.microsoft.com/en-us/library/bb397947.aspx。方法语法的优点是可以通过创建自己的扩展方法来扩展linq。请参见https://msdn.microsoft.com/en-us/library/bb383977.aspx。 - Harald Coppoolse

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接