2009-12-05 69 views
1

非常原始的問題,但我卡住了(我猜是新手)。我有一個函數應該給我發送公司列表:另外,我希望調用者也能夠爲下拉列表指定一個頂層元素。(對於「無」)。我有以下一段代碼,我將如何將返回的SelectList附加到頂層元素?LINQ聯合常數值

public static SelectList GetCompanies(bool onlyApproved, FCCIEntityDataContext entityDataContext, SelectListItem TopElement) 
    { 
     var cs = from c in entityDataContext.Corporates 
       where (c.Approved == onlyApproved || onlyApproved == false) 
       select new 
       { 
        c.Id, 
        c.Company 
       }; 

     return new SelectList(cs.AsEnumerable(), "Id", "Comapny"); 
    } 

謝謝!

+0

@Mark Byers:感謝您在20分鐘內提供解決方案!非常感謝。 – effkay 2009-12-05 15:49:37

回答

2

這應該爲你工作:

List<Corporate> corporates = 
      (from c in entityDataContext.Corporates 
      where (c.Approved == onlyApproved || onlyApproved == false) 
      select c).ToList(); 
corporates.Add(new Corporate { Id = -1, Company = "None" }); 

return new SelectList(corporates.AsEnumerable(), "Id", "Comapny"); 
+0

非常棘手...代碼被編譯;現在測試;帖子更新一旦確認..... thx。 – effkay 2009-12-05 15:35:05

+0

工作!謝謝! – effkay 2009-12-05 15:47:05

+0

建議:最後選擇變量「cs」不是必需的 - 您可以將企業直接傳遞給SelectList的構造函數... – effkay 2009-12-05 15:47:42

0
cs.ToList().Insert(0, new { TopElement.ID, TopElement.Company }); 
+0

TopElement是SelectListItem,它只包含Value和Text。 – 2009-12-05 15:20:23

2

這種方法一直爲我工作。

public static SelectList GetCompanies(bool onlyApproved, FCCIEntityDataContext entityDataContext, SelectListItem TopElement) 
    { 
      var cs = from c in entityDataContext.Corporates 
          where (c.Approved == onlyApproved || onlyApproved == false) 
          select new SelectListItem { 
            Value = c.Id, 
            Text = c.Company 
          }; 

      var list = cs.ToList(); 
      list.Insert(0, TopElement); 

      var selectList = new SelectList(list, "Value", "Text"); 
      selectList.SelectedValue = TopElement.Value; 

      return selectList; 
    } 

更新忘記我這樣做時,我吸取了教訓。您必須輸出LINQ作爲SelectListItem。

+0

'System.Collections.Generic.List .Insert(int,AnonymousType#1)'的最佳重載方法匹配有一些無效參數 AND 參數'2':無法從'AnonymousType# 2'到'AnonymousType#1'。 我想我忘了指定entityDataContext.Corporates是LINQ to SQL類...編譯器不允許添加匿名類型.... – effkay 2009-12-05 15:23:34

+0

試試此更新。 – 2009-12-05 15:35:56

+0

是的;我想現在它會起作用;感謝您的努力! – effkay 2009-12-05 15:48:41

0

指示你可以將其轉換爲一個列表或者你可以聯盟的IQueryable有一個元素的數組常量導致(甚至來排序):

static void Main(string[] args) 
    { 
     var sampleData = new[] { 
      new { Id = 1, Company = "Acme", Approved = true }, 
      new { Id = 2, Company = "Blah", Approved = true } 
     }; 

     bool onlyApproved = true; 

     var cs = from c in sampleData 
       where (c.Approved == onlyApproved || onlyApproved == false) 
       select new 
       { 
        c.Id, 
        c.Company 
       }; 

     cs = cs.Union(new [] {new { Id = -1, Company = "None" }}).OrderBy(c => c.Id); 

     foreach (var c in cs) 
     { 
      Console.WriteLine(String.Format("Id = {0}; Company = {1}", c.Id, c.Company)); 
     } 

     Console.ReadKey(); 
    }