【问题标题】:How to do a join query on a dataset that has multiple tables using VB.NET如何使用 VB.NET 对具有多个表的数据集进行连接查询
【发布时间】:2013-09-18 11:40:19
【问题描述】:

我正在将两个 XML 文件读入一个数据集。为此,我将第一个 xml 文件读入数据集,将第二个 xml 文件读入另一个数据集,然后将这两个数据集合并到一个数据集中。我不确定这是否是最好和最有效的方法。

xmlFilePath = "C:\RESUSCITATION_INFUSION_DRUGS.xml"
dsInfusions_min.ReadXml(xmlFilePath)

xmlFilePath = "C:\RESUSCITATION_WEIGHT_CAT.xml"
dsWeight.ReadXml(xmlFilePath)

dsMain.Merge(dsInfusions_min.Tables(0))
dsMain.Merge(dsWeight.Tables(0))

所以现在我的 dsMain 数据集有两个表。我的问题是,如何执行一个 select 语句来连接两个表,例如下面的 select,并将结果合并到另一个数据集中?

SELECT
    D.DRUG_NAME,
    D.DRUG_UNITS,
    D.PATIENT_WEIGHT_CATEGORY
FROM
    RESUSCITATION_INFUSION_DRUGS D, RESUSCITATION_WEIGHT_CAT C
WHERE
    D.PATIENT_WEIGHT_CATEGORY = C.PATIENT_WEIGHT_CATEGORY AND
    15 <  C.MAXIMUM_WEIGHT and
    15 >= C.MINIMUM_WEIGHT
ORDER BY
    D.DRUG_NAME

这是我的两个 xml 文件...

<?xml version='1.0'  encoding='UTF-8' ?>
<RESUSCITATION_WEIGHT_CATEGORIES>
    <RESUSCITATION_WEIGHT_CATEGORY>
        <PATIENT_WEIGHT_CATEGORY>00</PATIENT_WEIGHT_CATEGORY>
        <MINIMUM_WEIGHT>0</MINIMUM_WEIGHT>
        <MAXIMUM_WEIGHT>9999</MAXIMUM_WEIGHT>
        <CATEGORY_DESCRIPTION>All patients, regardless of weight.   </CATEGORY_DESCRIPTION>
    <UPDATED_WHEN>2003-08-20 12:00:57</UPDATED_WHEN>
</RESUSCITATION_WEIGHT_CATEGORY>
<RESUSCITATION_WEIGHT_CATEGORY>
    <PATIENT_WEIGHT_CATEGORY>01</PATIENT_WEIGHT_CATEGORY>
    <MINIMUM_WEIGHT>0</MINIMUM_WEIGHT>
    <MAXIMUM_WEIGHT>4</MAXIMUM_WEIGHT>
    <CATEGORY_DESCRIPTION>Patients less than 4 Kg.</CATEGORY_DESCRIPTION>
    <UPDATED_WHEN>2003-08-20 12:01:23</UPDATED_WHEN>
</RESUSCITATION_WEIGHT_CATEGORY>
<RESUSCITATION_WEIGHT_CATEGORY>
    <PATIENT_WEIGHT_CATEGORY>02</PATIENT_WEIGHT_CATEGORY>
    <MINIMUM_WEIGHT>4</MINIMUM_WEIGHT>
    <MAXIMUM_WEIGHT>9999</MAXIMUM_WEIGHT>
    <CATEGORY_DESCRIPTION>Patients greater than 4 Kg.</CATEGORY_DESCRIPTION>
    <UPDATED_WHEN>2003-08-20 12:01:52</UPDATED_WHEN>
</RESUSCITATION_WEIGHT_CATEGORY>
<RESUSCITATION_WEIGHT_CATEGORY>
    <PATIENT_WEIGHT_CATEGORY>03</PATIENT_WEIGHT_CATEGORY>
    <MINIMUM_WEIGHT>0</MINIMUM_WEIGHT>
    <MAXIMUM_WEIGHT>5</MAXIMUM_WEIGHT>
    <CATEGORY_DESCRIPTION>Patients less than 5 Kg.</CATEGORY_DESCRIPTION>
    <UPDATED_WHEN>2007-10-18 13:46:43</UPDATED_WHEN>
</RESUSCITATION_WEIGHT_CATEGORY>
<RESUSCITATION_WEIGHT_CATEGORY>
    <PATIENT_WEIGHT_CATEGORY>04</PATIENT_WEIGHT_CATEGORY>
    <MINIMUM_WEIGHT>5</MINIMUM_WEIGHT>
    <MAXIMUM_WEIGHT>9999</MAXIMUM_WEIGHT>
    <CATEGORY_DESCRIPTION>Patients greater than 5 Kg.</CATEGORY_DESCRIPTION>
    <UPDATED_WHEN>2007-10-18 13:47:23</UPDATED_WHEN>
</RESUSCITATION_WEIGHT_CATEGORY>

<?xml version='1.0'  encoding='UTF-8' ?>
<RESUSCITATION_INFUSION_DRUGS>
<RESUSCITATION_INFUSION_DRUG>
    <DRUG_NAME>DOBUTamine</DRUG_NAME>
    <PATIENT_WEIGHT_CATEGORY>07</PATIENT_WEIGHT_CATEGORY>
    <DRUG_CONCENTRATION>12.5</DRUG_CONCENTRATION>
    <DRUG_CONCENTRATION_UNITS>mg/mL</DRUG_CONCENTRATION_UNITS>
    <DOSAGE_RATE>1</DOSAGE_RATE>
    <DOSAGE_RATE_UNITS>mL/h</DOSAGE_RATE_UNITS>
    <DOSAGE_RATIO>2</DOSAGE_RATIO>
    <DOSAGE_RATIO_UNITS>mcg/kg/min</DOSAGE_RATIO_UNITS>
    <SOLUTION_PREPARATION></SOLUTION_PREPARATION>
    <SOLUTION_UNITS>mg in 50 mL D5W</SOLUTION_UNITS>
    <VOLUME_UNITS>mL</VOLUME_UNITS>
    <SOLUTION_CONCENTRATION></SOLUTION_CONCENTRATION>
    <DRUG_VOLUME></DRUG_VOLUME>
</RESUSCITATION_INFUSION_DRUG>
<RESUSCITATION_INFUSION_DRUG>
    <DRUG_NAME>DOPamine</DRUG_NAME>
    <PATIENT_WEIGHT_CATEGORY>03</PATIENT_WEIGHT_CATEGORY>
    <DRUG_CONCENTRATION>3.2</DRUG_CONCENTRATION>
    <DRUG_CONCENTRATION_UNITS>mg/mL</DRUG_CONCENTRATION_UNITS>
    <DOSAGE_RATE></DOSAGE_RATE>
    <DOSAGE_RATE_UNITS>mL/h</DOSAGE_RATE_UNITS>
    <DOSAGE_RATIO>5</DOSAGE_RATIO>
    <DOSAGE_RATIO_UNITS>mcg/kg/min</DOSAGE_RATIO_UNITS>
    <SOLUTION_PREPARATION>160</SOLUTION_PREPARATION>
    <SOLUTION_UNITS>mg in 50 mL D5W</SOLUTION_UNITS>
    <VOLUME_UNITS>mL</VOLUME_UNITS>
    <SOLUTION_CONCENTRATION>3200</SOLUTION_CONCENTRATION>
    <DRUG_VOLUME></DRUG_VOLUME>
</RESUSCITATION_INFUSION_DRUG>

我想在 PATIENT_WEIGHT_CATEGORY 字段中加入两个 xml 文件。

谢谢!

【问题讨论】:

标签: vb.net dataset


【解决方案1】:

如果您有直接的 XML 数据,请不要使用数据集。这是 VB.NET 优于 C# 恕我直言的一个领域。

  Dim Table1 = XDocument.Load("path to file")...<rootElement>...<rowElement>

  Dim Table2 = XDocument.Load("path to file")...<rootElement>...<rowElement>


  Dim result = Table1.Join(inner:=Table2,

                        outerKeySelector:=Function(o) o.Key,

                        innerKeySelector:=Function(i) i.Key,

                        resultSelector:=Function(i,o) With New {.fieldName:= o.@f1,

                                                                .fieldName2:= i.@f2})

http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b

您还可以做的另一件事是将 xml 转换为 expando 对象并仍然执行连接操作。


Dim Table1 = XDocument.Load("paty to the file")...... .Select(Function(r as XElement) 暗淡记录为 Object = New Dynamic.ExpandoObject() record.FieldName = r.@Field.Value())

如果您提供实际架构,我可以提供一个更好的示例。

祝你好运

【讨论】:

  • 感谢大家的回复。
  • 我发布了我的两个 xml 文件的示例。
  • 我为您编写了代码,代码位于gist.github.com/jcwrequests/6616176。基本上我将你的两个文件作为资源嵌入。 Source1 是 RESUSCITATION_WEIGHT_CATEGORIES,Source2 是 RESUSCITATION_INFUSION_DRUGS。
  • 感谢您提供代码示例,但一定是因为我是 Java 人,但我无法确定该代码的正面或反面。我假设您的示例使用的是 linq?我之前没有想到要提到这一点,但是我想使用数据集(或至少将最终结果反馈给数据集)的原因是因为我正在修改现有的应用程序并且如果我坚持使用数据集我不必更改很多现有代码。
  • 我们的应用程序当前连接到 Oracle 数据库以获取数据,该数据是静态的,而且很少,因此我们的想法是将这些数据存储在 xml 文件中,以消除对甲骨文数据库。因此,如果我可以通过坚持使用数据集简单地将源从 Oracle 更改为 xml 文件,我将不需要更改应用程序的任何其他部分。它确实有效,但如果我所有的数据都在一个 xml 文件中,但不幸的是我需要加入几个 xml 文件。我想知道简单地使用 Access 数据库而不是 xml 文件是否会简单得多?
猜你喜欢
  • 1970-01-01
  • 2021-02-11
  • 1970-01-01
  • 2012-03-17
  • 1970-01-01
  • 2017-07-17
  • 2018-05-30
  • 1970-01-01
  • 2021-06-10
相关资源
最近更新 更多