IGrouping <decimal,string>不包含&#39; name&#39;的定义。

时间:2017-07-14 12:17:48

标签: c# entity-framework linq

使用LINQ和lambda表达式,我试图将我已经提取的数据写入文本文件。

using (var contextDb = new TimoToolEntities())
{
    using (var writeFile = new StreamWriter(saveTo))
    {

        var randomData = contextDb.WorkCenter_Operations.Where(d =>  d.Job_Number >= 1 && d.Part_Number.Length >= 1 && d.Oper_Number >= 1 )
        .OrderBy(d => d.Oper_Number)
        .GroupBy(d =>  d.Job_Number , d => d.Part_Number ).ToList();

        foreach (var record in randomData)
        {
            Console.WriteLine(record.Job_Number + "," + record.Part_Number); // error here
        }
    }
    Console.ReadLine();
}

我收到错误&#39; IGrouping不包含&#39; name&#39;的定义没有延伸方法&#39; name&#39;接受第一个类型&#39; IGrouping&#39;可以找到。

我环顾四周并相信这些物品是匿名的,但我还没有找到可行的修复方法。

1 个答案:

答案 0 :(得分:2)

当您使用GroupBy

的此重载时
.GroupBy(d =>  d.Job_Number , d => d.Part_Number )

第一个lambda是一个键选择器(按Job_Number分组),第二个是值选择器。您的record将是Part_Number的集合,其中Job_Number为关键字。

此MSDN示例说明了基本用法:

// Group the pets using Age as the key value 
// and selecting only the pet's Name for each value.
IEnumerable<IGrouping<int, string>> query =
    pets.GroupBy(pet => pet.Age, pet => pet.Name);

// Iterate over each IGrouping in the collection.
foreach (IGrouping<int, string> petGroup in query)
{
    // Print the key value of the IGrouping.
    Console.WriteLine(petGroup.Key);
    // Iterate over each value in the 
    // IGrouping and print the value.
    foreach (string name in petGroup)
        Console.WriteLine("  {0}", name);
}

您的意图并非100%明确,因此,如果您确实想要按多个字段进行分组,请使用不同的重载:

.GroupBy(d => new { d.Job_Number, d.Part_Number })

然后,您的record将是您的数据的集合,并且将具有您可以访问的匿名密钥,例如record.Key.Job_Number