【问题标题】:Adding results to a dictionary using xelement使用 xelement 将结果添加到字典
【发布时间】:2014-03-11 12:39:22
【问题描述】:
private Dictionary<int, double> TaxDiction { set; get; }     

XDocument doc = XDocument.Load(path);
XElement xelement = XElement.Load(path);
var query = from nm in xelement.Descendants("EmployeeFinance")
            where (int)nm.Element("EmpPersonal_Id") == empID
            select new AllowancePaid
            {
                TaxDiction = ??
            };
var resultquery = query.SingleOrDefault();

已编辑 我正在从 xml 文件中进行选择,并希望将这些值插入到字典 (TaxDiction) 中。在我选择这两个值并将其插入单独的列表之前,如下所示:

list1 = nm.Element("ListOfTaxableAllowance").Elements("Amount").Attributes("BenListId").Select(a => (int)a).ToList(),
list2 = nm.Element("ListOfTaxableAllowance").Elements("Amount").Select(a => (double)a).ToList()

但是,这两个列表中的值是相关的,我想将它们插入字典。所以 list1 中的值将是键,而 list2 中的值将是我字典中的值。我认为这样会更有效,因为这些值是相关的。我希望这有助于澄清一些事情。谢谢。

已编辑

我试过了……

TaxDiction.Add(nm.Element("ListOfTaxableAllowance").Elements("Amount").Attributes("BenListId").Select(a => (int)a).ToList(),nm.Element("ListOfTaxableAllowance").Elements("Amount").Attributes("BenListId").Select(a => (int)a).ToList())

但是我得到了一个无效的初始化器成员声明器

XML 示例文件。

  <EmployeeFinance>
    <EmpPersonal_Id>494</EmpPersonal_Id>
    <NonStatDedct>
      <DeductedAmt NonStatID="1037">0</DeductedAmt>
      <DeductedAmt NonStatID="106">5000</DeductedAmt>
    </NonStatDedct>
    <TotalDeduction>39909.83</TotalDeduction>
    <TotalTaxableEarnings>120054.27</TotalTaxableEarnings>
    <TotalNonTaxableEarnings>29500</TotalNonTaxableEarnings>
    <No_DaysWorked>21.667</No_DaysWorked>
    <Payperiod_EndDate>2014-02-28T00:00:00</Payperiod_EndDate>
    <Exchange_Rate>207.00</Exchange_Rate>
    <Currency>GYD</Currency>
    <Date_Appointment>2009-11-30T00:00:00</Date_Appointment>
    <Date_Employment>1994-12-01T00:00:00</Date_Employment>
    <Date_Termination>0001-01-01T00:00:00</Date_Termination>
    <Payperiod_StartDate>2014-02-01T00:00:00</Payperiod_StartDate>
    <BatchNumber>3192</BatchNumber>
    <PAYE_Free_Pay_Awarded>50000</PAYE_Free_Pay_Awarded>
    <Income_Tax_RateID>4</Income_Tax_RateID>
    <NIS_RateID>1</NIS_RateID>
    <Daily_Rate>5540.881</Daily_Rate>
    <NIS_weeks_worked>0</NIS_weeks_worked>
    <Incentive />
    <Retro>0</Retro>
    <ListOfTaxableAllowance>
      <Amount BenListId="4">0.00000</Amount>
      <Amount BenListId="0">0</Amount>
    </ListOfTaxableAllowance>
    <ListOfTNonaxableAllowance>
      <Amount BenListId="4">23500.00000</Amount>
      <Amount BenListId="0">0</Amount>
    </ListOfTNonaxableAllowance>
    <ListOfTaxableBenefits>
      <Amount BenListID="0">0</Amount>
    </ListOfTaxableBenefits>
    <ListOfNonTaxableBenefits>
      <Amount BenListID="0">0</Amount>
    </ListOfNonTaxableBenefits>
    <ListOfTaxableAddIncome>
      <Amount AddEarnID="14">0.00000</Amount>
    </ListOfTaxableAddIncome>
    <ListOfNonTaxableAddIncome>
      <Amount AddEarnID="14">6000.00000</Amount>
    </ListOfNonTaxableAddIncome>
    <ListOfNISdeductible>
      <Amount>0</Amount>
    </ListOfNISdeductible>
    <ListOfOtherTaxableAmount>
      <Amount>0</Amount>
    </ListOfOtherTaxableAmount>
    <ListOfPartofPension>
      <Amount>23500.00</Amount>
    </ListOfPartofPension>
  </EmployeeFinance>

【问题讨论】:

  • 您当前的尝试有什么问题?解析异常?为什么你有两行完全相同的代码?示例 xml 在哪里?
  • 我在上面进行了编辑.. 从 xml 读取很好。我可以选择将其插入列表,但是我认为如果我可以将其插入字典会更有效。我不知道如何将其插入字典。插入列表有效!
  • 如果您继续阅读,您将看到 .. EDITED .. 我展示了我所做的尝试.. 请在发表评论之前先阅读整个问题。
  • @Maverick1415 您的问题不清楚。您正在尝试选择完全相同的值(这是错误的并且无法编译)但您仍然没有清楚地解释您的问题并且没有向我们展示xml 文件格式。如果您没有向我们提供足够的信息,我们如何为您提供帮助?
  • @Maverick1415 你想从这个文件中得到什么数据在字典里?

标签: c# xml linq dictionary


【解决方案1】:

我认为您需要以BenListId 属性为键,Amount 为值的字典:

TaxDiction = nm.Element("ListOfTaxableAllowance")
               .Elements("Amount")
               .ToDictionary(a => (int)a.Attribute("BenListId"),
                             a => (double)a)

【讨论】:

  • 哇.. 谢谢.. 这正是我所需要的。抱歉混淆了..漂亮!
  • @Maverick1415 如果您用简单的英语简洁地陈述您的要求,即您首先要实现的目标,然后是您迄今为止尝试的一些示例代码,那么找到解决方案会容易得多.祝你好运!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-18
  • 2011-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多