Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要LinqToXml分组的帮助吗_Linq_Linq To Xml - Fatal编程技术网

需要LinqToXml分组的帮助吗

需要LinqToXml分组的帮助吗,linq,linq-to-xml,Linq,Linq To Xml,我有一个XML文件,我正试图按属性“Width”对其进行分组。以下是一个片段: <nodes> <FieldType Name="1000" OriginalName="1000" ScriptName="" SqlType="12" Width="1000" EnableValues="0" Scale="0" ForceMatch="0" ForceMatchCaseSensitive="0" SortAlphabetically="0" /> <FieldTy

我有一个XML文件,我正试图按属性“Width”对其进行分组。以下是一个片段:

<nodes>
<FieldType Name="1000" OriginalName="1000" ScriptName="" SqlType="12" Width="1000" EnableValues="0" Scale="0" ForceMatch="0" ForceMatchCaseSensitive="0" SortAlphabetically="0" />
<FieldType Name="Varchar 1000" OriginalName="Varchar1000" ScriptName="" SqlType="12" Width="1000" EnableValues="0" Scale="0" ForceMatch="0" ForceMatchCaseSensitive="0" SortAlphabetically="0" />
<FieldType Name="Varchar 10001" OriginalName="Varchar1000" ScriptName="" SqlType="12" Width="1000" EnableValues="0" Scale="0" ForceMatch="0" ForceMatchCaseSensitive="0" SortAlphabetically="0" />
<FieldType Name="2000" OriginalName="1000" ScriptName="" SqlType="12" Width="200" EnableValues="0" Scale="0" ForceMatch="0" ForceMatchCaseSensitive="0" SortAlphabetically="0" />
<FieldType Name="Varchar 200" OriginalName="Varchar1000" ScriptName="" SqlType="12" Width="200" EnableValues="0" Scale="0" ForceMatch="0" ForceMatchCaseSensitive="0" SortAlphabetically="0" />
<FieldType Name="Varchar 2001" OriginalName="Varchar1000" ScriptName="" SqlType="12" Width="200" EnableValues="0" Scale="0" ForceMatch="0" ForceMatchCaseSensitive="0" SortAlphabetically="0" />
<FieldType Name="Y/N" ScriptName="" SqlType="12" Width="1" EnableValues="1" ForceMatch="1" Scale="0" ForceMatchCaseSensitive="0" SortAlphabetically="0" />
但它仍然返回:1000,1000,1000,200,200

知道我的语法有什么问题吗?

试试这个:

XDocument xmlDoc = XDocument.Load(@"c:\temp\sample.xml");
var q = 
    from c in xmlDoc.Descendants("FieldType")
    group c by c.Attribute("Width").Value into cust_widths
    select cust_widths.Key;

foreach (var name in q)
{
    System.Diagnostics.Debug.WriteLine(name);
}
您的代码有几个问题:

  • 您将整个xmlDoc分组,而不仅仅是
    FieldType
    元素
  • 您按
    XAttribute
    对象分组,而不是按属性值分组
  • 实际上还有一个更简单的查询版本:

    var q = xmlDoc
        .Descendants("FieldType")
        .Select(c => c.Attribute("Width").Value)
        .Distinct();
    
    试试这个:

    XDocument xmlDoc = XDocument.Load(@"c:\temp\sample.xml");
    var q = 
        from c in xmlDoc.Descendants("FieldType")
        group c by c.Attribute("Width").Value into cust_widths
        select cust_widths.Key;
    
    foreach (var name in q)
    {
        System.Diagnostics.Debug.WriteLine(name);
    }
    
    您的代码有几个问题:

  • 您将整个xmlDoc分组,而不仅仅是
    FieldType
    元素
  • 您按
    XAttribute
    对象分组,而不是按属性值分组
  • 实际上还有一个更简单的查询版本:

    var q = xmlDoc
        .Descendants("FieldType")
        .Select(c => c.Attribute("Width").Value)
        .Distinct();
    

    由于您是通过
    Attribute()
    操作符返回的
    XAttribute
    对象进行分组的,因此每个元素都有唯一的组键。您需要使用返回属性的
    Value
    属性来按属性值分组。

    因为您是按
    attribute()
    操作符返回的
    XAttribute
    对象分组的,所以每个元素都有唯一的组键。您需要使用返回属性的
    属性按属性值分组。

    伙计,我差一点就成功了!我想增值让每一行都独一无二。谢谢,我更喜欢你更简单的版本,一定很喜欢林克。老兄,我很接近!我想增值让每一行都独一无二。谢谢,我更喜欢你简单的版本,一定要爱linq。