1

文字列のリストがあります

List<string> lststr = new List<string>() { "1,", "2" };

以下を生成する必要があります

<DbRuleMappings>
  <DbRuleMapping dbDetailId="1" ruleMasterId="1" activeFlag="1" />
  <DbRuleMapping dbDetailId="1" ruleMasterId="2" activeFlag="1" />
  <DbRuleMapping dbDetailId="1" ruleMasterId="3" activeFlag="1" />
  <DbRuleMapping dbDetailId="1" ruleMasterId="4" activeFlag="1" />
  <DbRuleMapping dbDetailId = "2" ruleMasterId="1" activeFlag="1"/>
  <DbRuleMapping dbDetailId = "2" ruleMasterId="2" activeFlag="1"/>
  <DbRuleMapping dbDetailId = "2" ruleMasterId="3" activeFlag="1"/>
  <DbRuleMapping dbDetailId = "2" ruleMasterId="4" activeFlag="1"/>
 </DbRuleMappings>

私の試み...うまくいきません

List<string> lststr = new List<string>() { "1,", "2" };            

XDocument docDBRuleMapping =
        new XDocument(
           new XElement("DbRuleMappings",
                   Enumerable.Range(1, 4).Select(x => x)
                   .Select(i => new XElement("DbRuleMapping",  
                           new XAttribute("dbDetailId", i),
                           new XAttribute("ruleMasterId", i),
                           new XAttribute("activeFlag", 1)))));
4

1 に答える 1

1

現在、まったく使用していませんlststr。あなたは基本的にあなたのSelectManyと結合するために使用する必要がありlststrますEnumerable.Range. おそらく、クエリ式を使用すると最も簡単に実行できます。

var detailIds = new List<int> { 1, 2 };

var doc = new XDocument(new XElement("DbRuleMappings",
    from detailId in detailIds
    from ruleId in Enumerable.Range(1, 4)
    select new XElement("DbRuleMapping",  
        new XAttribute("dbDetailId", detailId),
        new XAttribute("ruleMasterId", ruleId),
        new XAttribute("activeFlag", 1))));

(入力を与えられたデータList<int>ではなくa に変更しました...ただし、本当に必要な場合は a で問題なく動作します。List<string>List<string>

クエリ式が気に入らない場合は、次のようにします。

var detailIds = new List<int> { 1, 2 };

var doc = new XDocument(new XElement("DbRuleMappings",
    detailIds.SelectMany(_ => Enumerable.Range(1, 4),
        (detailId, ruleId) => new XElement("DbRuleMapping",  
            new XAttribute("dbDetailId", detailId),
            new XAttribute("ruleMasterId", ruleId),
            new XAttribute("activeFlag", 1)))));
于 2013-07-02T06:02:48.987 に答える