Linq中Key的目的是什么?

时间:2015-11-09 10:30:04

标签: c# linq

linq中密钥的用途是什么?我不确定它的目的是什么?它能做什么?它如何影响代码的运行方式?

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>();

    }
}

1 个答案:

答案 0 :(得分:1)

关键是你小组中常见的事情。

例如,如果您有一系列单词并希望将所有单词组合在其第一个字母上,那么您的组中的单词以字母“a”开头,而组中的单词则以字母'开头' b'等等。

或者,如果您将单词序列分组为具有相同字符数的单词组,则只有一组单词只包含一个字符,一组单词包含两个字符,一组包含三个字符等。 / p>

钥匙是你过去常常分组的东西。所以关键是第一个字母或单词,或者当你按字符数分组时单词中的字母数。

您可以使用该键识别该组。因此,如果您希望组中的单词以字母'h'开头,则表示您希望组序列中的元素具有等于'h'的键。如果按字符数分组,可以要求使用键4的组来获取所有四个字母的单词。

组密钥是唯一的。您可能确定只有一个这样的元素,因此您可以要求第一个(或者如果没有这样的组则默认)

示例:下载荷马的Iliad一书,并将结果分成一系列单词:

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');