PropertyGroupDescription无法按预期工作

时间:2013-07-23 20:46:06

标签: c# wpf

我在LINQ to SQL应用中使用了C# WPF,我正在尝试使用PropertyGroupDescriptionlistview LastNamesSQL Server Db进行分组}。

列的我的DB LINQ设计器映射如下所示:

[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_LastName", AutoSync=AutoSync.Always, DbType="VarChar(MAX)", IsDbGenerated=true, UpdateCheck=UpdateCheck.Never)]
        public string LastName
        {
            get
            {
                return this._LastName;
            }
            set
            {
                if ((this._LastName != value))
                {
                    this.OnLastNameChanging(value);
                    this.SendPropertyChanging();
                    this._LastName = value;
                    this.SendPropertyChanged("LastName");
                    this.OnLastNameChanged();
                }
            }
        }

数据库中的表名是Contacts,我认为该表的linq代码有点太多了,所以我给了这个名字。

我有一个Observable Collection的db表,我将listview的itemsource绑定到。

public ObservableCollection<Namespace.Database.Contact> Contacts
        {
            get;
            set;
        }

以下是我在使用PropertyGroupDescription

时尝试和失败的方法
    CollectionView view = (CollectionView)CollectionViewSource.GetDefaultView(this.Contacts);
    PropertyGroupDescription groupDescription = new PropertyGroupDescription(this.Contacts.LastName);  //<-- Cant do that
    view.GroupDescriptions.Add(groupDescription);

由于多次可以使用相同的姓氏,我想通过它进行分组。

我假设我可以做到以上,但不能:

我试过了:

this.Contacts.Where(x => x.LastName!= null).ToString().FirstOrDefault());

this.Contacts.Select(x => x.LastName!= null).ToString()

我做错了什么?

感谢您提供任何帮助或回复。

2 个答案:

答案 0 :(得分:1)

使用

CollectionView view = (CollectionView)CollectionViewSource.GetDefaultView(this.Contacts);
PropertyGroupDescription groupDescription = new PropertyGroupDescription("LastName");  
view.GroupDescriptions.Add(groupDescription);

代替。

您应该在PropertyGroupDescription的构造函数中使用硬编码属性名称。

答案 1 :(得分:1)

此方法应分组,然后跳过null。

    public void test() {

        // This line should work for grouping
        var groupedContacts = Contacts.GroupBy(contact => contact.LastName);
        foreach(var group in groupedContacts){
            string LastName = group.Key;
            if(LastName == null){
                continue;
            }
            foreach(var person in group){
                Console.WriteLine(person.FirstName);
            }
        }

    }