1

我的程序应该从遗留的平面文件中读取和处理数据。

我将数据读入private ICollection<transaction> transactions;

public class transaction
{
    public int transactionNum;
    public DateTime transactionDate;
    public int orderNum;
    public string customerName;
    public Decimal amount;
}

如何创建一个DataSource对此ICollection<T>(或它的 LINQ 查询),以便我可以对其进行DataBind多个控制值?

注意:我的 LINQ 知识很少。过去,我可以只将一个数据库表拖到我的应用程序中。

4

1 回答 1

1

从您的评论中:

在 ASP.NET 表单上,我有一个名为 customerCheckL 的 CheckBoxList。加载数据文件后,代码应使用不同客户名称的列表填充 customerCheckL.Items。我怎么做?customerCheckL.DataSourceID = ???

这更有意义。您可以实现一个EqulityComparer<transactions>按客户进行比较的类:

public class TransactionCustomerComparer : IEqualityComparer<transaction>
{
    public bool Equals(transaction x, transaction y)
    {
        if (x == null || y == null) return false;
        return x.customerName == y.customerName;
    }

    public int GetHashCode(transaction obj)
    {
        if (obj == null) return int.MinValue;
        return obj.customerName.GetHashCode();
    }
} 

(请注意,您可以在所有Enumerable允许传递自定义比较器的方法中使用此方法)

然后你可以使用Distinct来获得一个唯一的列表。 您只需要设置DataSource,DataTextField和 .DataValueFieldDataBindCheckBoxList

var customerComparer = new TransactionCustomerComparer();
customerCheckL.DataSource = transactions.Distinct(customerComparer);
customerCheckL.DataTextField = "customerName";
customerCheckL.DataValueField = "transactionNum";
customerCheckL.DataBind();
于 2013-01-24T16:58:35.513 回答