1

非常原始的问题,但我被困住了(我猜是新手)。我有一个应该向我发送公司列表的功能:另外,我希望调用者也能够为下拉列表指定顶部元素..(比如“无”)。我有以下一段代码,我将如何在返回的 SelectList 中附加顶部元素?

    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" );
    }

谢谢!

4

4 回答 4

3

这应该适合你:

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");
于 2009-12-05T15:27:04.217 回答
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。

于 2009-12-05T15:19:48.520 回答
0
cs.ToList().Insert(0, new { TopElement.ID, TopElement.Company });
于 2009-12-05T15:19:15.603 回答
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();
    }
于 2009-12-05T15:26:11.033 回答