VB.net Linq数据表查询

时间:2015-08-08 16:33:43

标签: c# vb.net linq datatables

我有一个包含这些列和数据的数据集,如下所示:

name :  path :           bow_Id :    midfront_Id :  midback_Id :  stern_id
gun1    guns\guns_1      0
gun2    guns\guns_1      0
gun3    guns\guns_1      0
gun4    guns\guns_1      0

我想使用名为' key'的字符串变量选择其中一个' _Id'列只返回'路径'匹配'名称中的传递字符串'柱。 我试了几个例子然后放弃了..

要填充我在XML字符串中读取的数据集,如下所示:

 dress_dataset.ReadXml(Application.StartupPath + "\WoWs_Scripts\" + s_name + ".xml")

这是我加载的一些XML:

  <JSB018_Yamato_1944.xml>
<sections>
<bow>
  <model>japan\ship\battleship\JSB018_Yamato_1944\JSB018_Yamato_1944_bow_ports.model</model>
    <node>
       <name>MP_JM025JSB018Bow_0_0</name>
       <model>japan\misc\JM025JSB018Bow\JM025JSB018Bow.model</model>
    </node>
    <node>
       <name>MP_JM026JSB018Bow_0_0</name>
       <model>japan\misc\JM026JSB018Bow\JM026JSB018Bow.model</model>
    </node>
    <node>
       <name>MP_JM029JSB018Bow_0_0</name>
       <model>japan\misc\JM029JSB018Bow\JM029JSB018Bow.model</model>
    </node>
    <node>
       <name>MP_JM033JSB018Bow_0_0</name>
       <model>japan\misc\JM033JSB018Bow\JM033JSB018Bow.model</model>
    </node>
    <node>
       <name>MP_JM109_Deck_Hatch_11</name>
       <model>japan\misc\JM109\JM109.model</model>
    </node>
    <node>
       <name>MP_JM310_Chrysanthemum_full</name>
       <model>japan\misc\JM310\JM310.model</model>
    </node>
    <node>
       <name>MP_CM086JSB018Bow_0_0</name>
       <model>common\misc\CM086JSB018Bow\CM086JSB018Bow.model</model>
    </node>
    <node>
       <name>MP_CM087JSB018Bow_0_0</name>
       <model>common\misc\CM087JSB018Bow\CM087JSB018Bow.model</model>
    </node>
    <node>
       <name>HP_Fire_Burn_1</name>
       <model>UNKNOWN_ITEM</model>
    </node>
</bow>

我在这些数据中有很多条目,所以如果有更快的方法可以做到这一点,那将是很酷的。 谢谢您的帮助 我应该添加..如果列的值为零,则它是该部分的一部分。另外,它是空的。

1 个答案:

答案 0 :(得分:2)

试试这个。您可以使用GroupBy()将所有相同的路径组合在一起,而不是使用字典,以便您可以按键

查找
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("name", typeof(string));
            dt.Columns.Add("path", typeof(string));
            dt.Columns.Add("bow_ID", typeof(int));
            dt.Columns.Add("midfront_ID", typeof(int));
            dt.Columns.Add("midback_ID", typeof(int));
            dt.Columns.Add("stern_ID", typeof(int));

            dt.Rows.Add(new object[] {"gun1","guns\\guns_1", 0});
            dt.Rows.Add(new object[] {"gun2","guns\\guns_2", 0});
            dt.Rows.Add(new object[] {"gun3","guns\\guns_1", 0});
            dt.Rows.Add(new object[] {"gun4","guns\\guns_2", 0});

            List<DataRow> filter = dt.AsEnumerable()
                .Where(x => x.Field<string>("path") == "guns\\guns_1" )
                .ToList();

            //use dictionary
            Dictionary<string, List<DataRow>> dict = dt.AsEnumerable()
                .GroupBy(x => x.Field<string>("path"), y => y)
                .ToDictionary(x => x.Key, y => y.ToList());

            List<DataRow> guns_1 = dict["guns\\guns_2"]; 
        }
    }
}
​