2014-10-08 121 views
2

我正在嘗試使用XDocument準備一個XML文檔,同時我將項目添加到特定的字典中,但是我遇到了以下錯誤。如何在lambda表達式的選擇方法中編寫多個表達式

方法'System.Linq.Enumerable.Select(System.Collections.Generic.IEnumerable,System.Func)'的類型參數不能根據用法推斷出來。嘗試明確指定類型參數。

和代碼片段

Dictionary<string, string> userguid = new Dictionary<string, string>(); 

    XDocument XMLDoc = 
       new XDocument(new XDeclaration("1.0", "utf-8", "yes"), 
       new XElement("NewDataSet", 
        new XElement("Users", 
         new XElement("UserID", userid), 
         new XElement("FullName", "anyone"), 
         new XElement("UserName", "anyone"), 
         new XElement("Password", 123), 
         new XElement("Description", "anyone"), 
         new XElement("DomainName", string.Empty), 
         new XElement("Mailbox_Size", 20), 
         new XElement("Enabled", "True"), 
         new XElement("Permissions", 14), 
         new XElement("CreationTime", "2011-07-19T17:45:58.53125+05:30") 
        ), 
       userNames.Select((item, value) => 
        { 
         new XElement("Users", 
          new XElement("UserID", Guid.NewGuid().ToString("N")), 
          new XElement("FullName", item.Trim()), 
          new XElement("UserName", item.Trim()), 
          new XElement("Password", passwords[value].Trim()), 
          new XElement("Description", item.Trim()), 
          new XElement("DomainName", string.Empty), 
          new XElement("Mailbox_Size", 20), 
          new XElement("Enabled", "True"), 
          new XElement("Permissions", 14), 
          new XElement("CreationTime", "2011-07-19T17:45:58.53125+05:30")); 
         userguid.Add(userid, emailAddresses[value].Trim()); 
        } 
         ) 
        )); 
+0

'Type'是'userNames'? – 2014-10-08 10:30:08

回答

1

你幾乎做的是正確的,但使用語句塊({…})時,你需要明確return一個合適的值,因爲Select需要一個返回值的委託。

(記住,簡稱單式拉姆達:

x => expr(x) 

真的只是短暫的更全面的版本:

x => { return expr(x); } 

+0

非常感謝。我從昨天開始一直在撓頭,你在一秒之內解決了我的問題 – vallabha 2014-10-08 10:45:42

1

當您使用的是塊而不是lambda(在select方法中,我的意思是),你應該返回結果。我的意思是userNames.Select((item, value) => { /* return the result here... */ });

Dictionary<string, string> userguid = new Dictionary<string, string>(); 

XDocument XMLDoc = 
    new XDocument(
     new XDeclaration("1.0", "utf-8", "yes"), 
     new XElement(
      "NewDataSet", 
      new XElement(
       "Users", 
       new XElement("UserID", userid), 
       new XElement("FullName", "anyone"), 
       new XElement("UserName", "anyone"), 
       new XElement("Password", 123), 
       new XElement("Description", "anyone"), 
       new XElement("DomainName", string.Empty), 
       new XElement("Mailbox_Size", 20), 
       new XElement("Enabled", "True"), 
       new XElement("Permissions", 14), 
       new XElement("CreationTime", "2011-07-19T17:45:58.53125+05:30") 
       ), 
      userNames.Select(
          (item, value) =>{ 
           userguid.Add(userid, emailAddresses[value].Trim()); 
           return new XElement(
            "Users", 
            new XElement("UserID", Guid.NewGuid().ToString("N")), 
            new XElement("FullName", item.Trim()), 
            new XElement("UserName", item.Trim()), 
            new XElement("Password", passwords[value].Trim()), 
            new XElement("Description", item.Trim()), 
            new XElement("DomainName", string.Empty), 
            new XElement("Mailbox_Size", 20), 
            new XElement("Enabled", "True"), 
            new XElement("Permissions", 14), 
            new XElement("CreationTime", "2011-07-19T17:45:58.53125+05:30")); 
          } 
       ) 
      ));