System.NullReferenceException при использовании Linq Xamarin - PullRequest
0 голосов
/ 17 сентября 2018

Решено

У меня есть таблица SQLite, созданная из класса с именем Стратегия , которая имеет два свойства String StrategyCode и String StrategyID.Я привязываю столбец StrategyCode к Spinner с этим кодом.

private void BindList()
{
    try
    {
        var list = connection.Query<Strategy>("SELECT StrategyCode FROM Strategy");
        BindStrategy = list.ConvertAll(x => Convert.ToString(x));
        var StratAdpater = new ArrayAdapter<System.String>(this, Resource.Layout.spinner_item, BindStrategy);
        StratAdpater.SetDropDownViewResource(Resource.Layout.spinner_item);
        spinner2.Adapter = StratAdpater;       
    }
    catch(Exception e)
    {
        Toast.MakeText(this, e.ToString(), ToastLength.Long).Show();
    }
}  

У меня есть textview прямо под этим Spinner, где я хочу показать StrategyID соответствующегоКод стратегии выбран из Spinner.Вот как я это делаю.

try
 {
   var selectedstrat = spinner2.SelectedItem.ToString();
   var userselection = (from a in connection.Table<Strategy>()
                                     where a.StrategyCode == selectedstrat
                                     select a);            
    strategyID.Text = userselection.FirstOrDefault().StrategyID;
 }
catch (Exception e)
{
    Toast.MakeText(this, e.ToString(), ToastLength.Long).Show();
}    

Но я получаю System.NullReferenceException - (ссылка на объект не установлена ​​на экземпляр объекта), а StrategyID не устанавливается на Textview.Но когда я жестко кодирую значение StrategyCode Например:

var userselection = (from a in connection.Table<Strategy>()
                                         where a.StrategyCode == "Strategy1"
                                         select a);

, тогда TextView отображает идентификатор стратегии с жестким кодом.Что здесь может быть не так?Я пробовал это

 var userselection = (from a in connection.Table<Strategy>()
                                         where a.StrategyCode == selectedstrat
                                         select a.StrageyID).FirstOrDefault();

                    StrategyID.Text = userselection.ToString();

Но все же я не могу получить StrategyID в TextView.

1 Ответ

0 голосов
/ 17 сентября 2018

Давайте посмотрим на эту строку:

var userselection = (from a in connection.Table<Strategy>() where a.StrategyCode == selectedstrat select a.StrageyID).FirstOrDefault();

Что если userselection равно null?

StrategyID.Text = userselection.ToString(); ^^^^^^^^^^^^^ <- null => throws

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...