过滤列表框的itemssource

时间:2013-06-17 10:14:47

标签: c# linq listbox windows-phone itemssource

我正在研究这个例子:http://code.msdn.microsoft.com/wpapps/Beginners-for-how-to-use-45690caa

我在表格中插入了一个名为“category”的新列

现在我需要在列表框中仅查看类别为==“card”的行

这是列表框:

<ListBox x:Name="ContactListBox" Grid.Row="2">
                        <ListBox.ItemTemplate>
                            <DataTemplate>
                                <Grid>
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="100" />
                                        <ColumnDefinition Width="200" />
                                        <ColumnDefinition Width="*" />
                                    </Grid.ColumnDefinitions>
                                    <Image Source="Images\open.png" Margin="-30, -18, 0, 0" Tap="Edit_Tap" Height="75" Width="75"/>
                                    <TextBlock Text="{Binding Name}" Tap="Edit_Tap" Grid.Column="1" FontSize="{StaticResource PhoneFontSizeLarge}" TextAlignment="Left"/>
                                </Grid>
                            </DataTemplate>
                        </ListBox.ItemTemplate>
                    </ListBox>

这是列表框的来源:

void Customers_Loaded(object sender, RoutedEventArgs e)
    {
        using (AddressBookDataContext dc = new AddressBookDataContext())
        {

            ContactListBox.ItemsSource = from c in dc.Contacts select c;

        }
    }

我试图改变它: ContactListBox.ItemsSource =来自c中的dc.Contacts其中c.category ==“card”选择c; 但是我不行,我该怎么办?

谢谢大家,抱歉我的英语不好

1 个答案:

答案 0 :(得分:0)

你没有提到你得到的异常,但听起来你可能会得到`NotSupportedException:成员“[whatever]”没有支持的SQL错误翻译“。

如果你搜索这个异常,你会在一个共同的主题上找到很多答案 - 本质上Linq2SQL不知道如何将“Type”翻译成SQL,所以它就会失败。在你的情况下,你可以通过使用Linq2SQL和Linq2Object来解决这个问题:

// L2S from the DB, transferred to an Enumerable
var itemSource = (from c in dc.Contacts select c).AsEnumerable();

ContactListBox.ItemsSource = itemSource.Where(c => c.Type == "q");

// or full form Linq
ContactListBox.ItemsSource = from c in itemSource where c.Type == "q" select c;

在我的情况下,我没有添加专栏,我只添加了多个不同Type的联系人,只过滤了Type“q”的内容。