PropertyGroupDescription未按预期工作

本文关键字:工作 PropertyGroupDescription | 更新日期: 2023-09-27 18:24:27

我在C# WPF应用程序中使用LINQ to SQL,并尝试使用PropertyGroupDescriptionlistviewLastNamesSQL 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();
                }
            }
        }

DB中的表名是Contacts,我认为表的linq代码太多了,无法发布,所以我给出了这个名称。

我有一个数据库表的Observable Collection,我正在将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()

我做错了什么?

感谢您的帮助或回复。

PropertyGroupDescription未按预期工作

使用

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

相反。

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

这个方法应该分组,然后跳过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);
            }
        }
    }