我正在创建一个用于列出自己拥有和想要的书籍的应用。此应用具有Sqlite数据库。每本书都有一行,其中包含ID,作者和标题列。我的问题是,当我添加一本新书时,我想让该用户选择键入新的作者姓名或从选择器中获取一个。选择器ItemsSource来自“作者”列。我的问题是,每位作者只能拥有一本书,而作者的名字在选择器中多次显示
toArray()
<StackLayout Orientation="Horizontal">
<Entry x:Name="authorName" HorizontalOptions="FillAndExpand" Text="{Binding Author}"
Keyboard="Text"
StyleClass="entry"/>
<StackLayout>
<Button x:Name="PickAuthor" Text="..." WidthRequest="40"
Clicked="PickAuthor_Clicked"/>
</StackLayout>
<Picker x:Name="ExistingAuthors"
Title="Select Author"
IsVisible="False"
SelectedIndexChanged="ExistingAuthors_SelectedIndexChanged">
<Picker.ItemDisplayBinding>
<Binding Path="Author" />
</Picker.ItemDisplayBinding>
</Picker>
</StackLayout>
我不希望选择器取代重复项。
答案 0 :(得分:2)
要从列表中删除重复项,可以使用Linq。下面的方法按重复字段对集合进行分组,然后选择第一组。
private void PickAuthor_Clicked(object sender, EventArgs e)
{
ExistingAuthors.ItemsSource = _book.GroupBy(b => b.Author) // group by Author
.Select(g => g.First()) // select first group
.ToList();
ExistingAuthors.Focus();
}
这将返回您的实体类型的列表。
答案 1 :(得分:0)
如果仅显示作者列表,请从Authors
中选择_book
,然后调用Distinct
删除重复的作者姓名。
private void PickAuthor_Clicked(object sender, EventArgs e)
{
ExistingAuthors.ItemsSource = _book.Select(x => x.Author.Trim()).Distinct().ToList();
ExistingAuthors.Focus();
}