0
Data1 = new ObservableCollection<dsData1>(from itmGetAllData2 in GetAllData2
                                          where itmGetAllData2.Name == strName
                                          select itmGetAllData2)[0]; 

上記のLINQは、一致する場合は正常に機能しますが、itmGetAllData2.Name == strName一致するレコードがない場合はstrNameエラーがスローされます。

誰でもこれを処理する方法を提案できますか? やってみた

.DefaultIfEmpty().Max(itmGetAllData2 => itmGetAllData2 == null ? "" : itmGetAllData2);

しかし、キャストエラーが発生しています。

4

3 に答える 3

1

The reason you are getting this error is because you are trying to access the first element of an empty query.

Use FirstOrDefault

var result = GetAllData2.FirstOrDefault(ad => ad.Name = strName);

if (result != null)
{
   // Initalize your ObservableCollection here
}
于 2013-10-23T14:44:58.860 に答える
1

You get this error when there is no match because [0] is trying to access the first object of a list that doesn't have any objects. Do this instead:

Data1 = GetAllData2.FirstOrDefault(d => d.Name == strName);

This will be the first item like you want, or null if none were found.

于 2013-10-23T14:45:15.697 に答える
1

コードは次のように簡略化できます。

Data1 = GetAllData2.FirstOrDefault(x => x.Name == strName);

一致するものが見つからない場合は、Data1になりますnull。(それがそのOrDefault部分が追加するものです) null を別の値に置き換えたい場合は、次のようにできます。

Data1 = GetAllData2.FirstOrDefault(x => x.Name == strName) ?? new dsData1();
于 2013-10-23T14:45:40.723 に答える