엔티티를 CollectionViewSource에 바인딩했습니다. 그런 다음 코드 뒤에 쿼리합니다. ID 필드는 PK이므로 FirstOrDefault()를 사용하여 내 앱을 더 빠르게 실행해야한다고 생각합니다. 그러나 항상 예외가 발생합니다 ...FirstOrDefault()를 CollectionViewSource와 함께 사용할 때 처리되지 않은 예외가 있습니까?
XAML :
<Window.Resources>
<CollectionViewSource x:Key="contractlogoesViewSource" d:DesignSource="{d:DesignInstance my:contractlogo, CreateList=True}" />
</Window.Resources>
<Grid>
<Grid DataContext="{StaticResource contractlogoesViewSource}" HorizontalAlignment="Left" Margin="12,12,0,0" Name="grid1" VerticalAlignment="Top">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
...
코드 숨김
그것은이 처리되지 않은 예외가 발생private void Window_Loaded(object sender, RoutedEventArgs e)
{
VBDAdvertisement.vbdadvertisementEntities vbdadvertisementEntities = new VBDAdvertisement.vbdadvertisementEntities();
System.Windows.Data.CollectionViewSource contractlogoesViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("contractlogoesViewSource")));
contractlogoesViewSource.Source = vbdadvertisementEntities.contractlogoes.Where(q => q.id.Equals(3)).FirstOrDefault();
}
:
An unhandled exception of type 'System.ArgumentException' occurred in
PresentationFramework.dll
Additional information: 'VBDAdvertisement.customer' is not a valid value for
property 'Source'.
을하지만 생략 FirstOrDefault()는 다음과 같이 표현식 트리에서 나타납니다.
contractlogoesViewSource.Source = vbdadvertisementEntities.contractlogoes.Where(q => q.id.Equals(3));
잘 작동합니다!
그럼 FirstOrDefault()가 오류를 일으키는 이유는 무엇입니까?
FirstOrDefault()를 사용하면이 경우, FirstOrDefault()를 사용하면 내 앱이 더 빨리 실행됩니까?
ps : 편집 양식을 디자인 중이므로 하나의 항목 만로드하고 싶습니다.
안녕 레이, id 필드는 기본 키이므로 고유합니다. FirstOrDefault()를 사용하면 어딘가에 하나의 레코드가 반환 될 것이라는 확신이들 경우 쿼리가 더 빨라질 것입니다. winform에서 나는 문제없이 바인딩 소스와 함께 FirstOrDefault()를 사용하지만 wpf는 그렇지 않습니다. – JatSing
그리고 이것은 편집 폼이므로 하나의 항목 만로드하면됩니다. – JatSing
@Sun, 나는 상황을 좀 더 분명하게하기 위해 나의 대답을 업데이트했다. – Ray