这是为POCO实现ObjectDataSource排序的方法吗?

时间:2012-02-24 03:28:56

标签: c# asp.net objectdatasource

当我不得不做这么多工作时,我有时会感觉到我忽略了某些东西。

此代码成功排序了一列。必须手动构建switch语句以用于其他语句。

我是否忽视了“实际/简单”的方式?

note msdn docs似乎有一条评论说这根本不可能,除非我读错了(但它确实有用,只是一种痛苦)这样)。

其他注意事项:我在这里使用DAC和POCO这些术语的信心不足,所以如果可能更好的话,请纠正我。

ObjectDataSource + GridView

    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="ObjectDataSource1" AllowSorting="True">
        <Columns>
            <asp:BoundField DataField="AppID" HeaderText="AppID" SortExpression="AppID" />
            <asp:BoundField DataField="Type" HeaderText="Type" SortExpression="Type" />
            <asp:BoundField DataField="Timestamp" HeaderText="Timestamp" SortExpression="Timestamp" />
            DataField="Credit" HeaderText="Credit" SortExpression="Credit" />
        </Columns>
    </asp:GridView>
    <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetLeads" TypeName="Leads.LeadsContainer" SortParameterName="sortParameter">
    </asp:ObjectDataSource>

来自DAC的代码段

    public List<ILead> GetLeads(string sortParameter)
    {
        List<ILead> leads = new List<ILead>();
        int numLeads = 10;
        Random random = new Random();
        while (leads.Count < numLeads)
        {
            leads.Add(Lead.CreateRandom(random));
        }
        string[] sortExpressions = sortParameter.Split(',');
        if (sortExpressions.Length > 0)
        {
            string sortExpression = sortExpressions[0];
            string[] sortInfos = sortExpression.Split(' ');
            string sortField = sortInfos[0];
            string sortDirection = (sortInfos.Length == 1 ? "ASC" : "DESC");
            switch (sortField)
            {
                case "Timestamp":
                    switch (sortDirection)
                    {
                        case "ASC":
                            leads = leads.OrderBy(c => c.Timestamp).ToList();
                            break;
                        case "DESC":
                            leads = leads.OrderByDescending(c => c.Timestamp).ToList();
                            break;
                        default:
                            break;
                    }
                    break;
                default:
                    break;
            }
        }
        return leads;
    }

POCO(界面)

public interface ILead
{
    string AppID { get; set; }
    string Type { get; set; }
    DateTime Timestamp { get; set; }
    string CDNumber { get; set; }
    string IP { get; set; }
    string ESourceID { get; set; }
    string State { get; set; }
    DateTime DateOfBirth { get; set; }
    string Email { get; set; }
    bool IsVetran { get; set; }
    string Credit { get; set; }
}

1 个答案:

答案 0 :(得分:0)

使用Dynamic linq library。这可以使linq查询以字符串作为参数,但字符串必须准备好。

该字符串可以用于任何事情,根据条件进行过滤,排序,在一个值和另一个值之间。