В обход нулевого возврата из методов доступа к данным с кортежем?

У меня есть этот метод доступа к данным, который возвращает доступность много в нашей ERP:

public JDEItemLotAvailability GetLotAvailabilityF41021(string _lot)
        {
            JDEItemLotAvailability _retValue = new JDEItemLotAvailability();
            _retValue.Lot = _lot;
            using (OleDbConnection con = new OleDbConnection(_ERPConfig.ConnectionString))
            {
                OleDbCommand cmd = new OleDbCommand();
                cmd.CommandText =
                    "select max(lilotn) lilotn,max(trim(limcu)) limcu,max(lilocn) lilocn," +
                    "max(lipqoh/100) lipqoh,max(liitm) liitm,max(imlitm) imlitm," +
                    "max(concat(imdsc1,imdsc2)) as imdsc,max(imuom1 ) imuom1 " +
                    "from "+ _ERPConfig .AS400Library +".f41021" + " left outer join proddta.f4101 on liitm=imitm " +
                    "where lilotn = ?";
                cmd.Parameters.AddWithValue("@lilotn", _lot);
                cmd.Connection = con;
                con.Open();
                OleDbDataReader rdr = cmd.ExecuteReader();
                if (rdr.HasRows)
                {
                    rdr.Read();
                    if (rdr["lilotn"] != DBNull.Value)
                    {
                        _retValue.Code = rdr.GetString(rdr.GetOrdinal("imlitm"));
                        _retValue.ShortCode = (int)rdr.GetDecimal(rdr.GetOrdinal("liitm"));
                        _retValue.Description = rdr.GetString(rdr.GetOrdinal("imdsc"));
                        _retValue.PrimaryUnitCode = rdr.GetString(rdr.GetOrdinal("imuom1"));
                        _retValue.AvailableQuantity = (int)rdr.GetDecimal(rdr.GetOrdinal("lipqoh"));
                        _retValue.BranchPlant = rdr.GetString(rdr.GetOrdinal("limcu"));
                        _retValue.Location = rdr.GetString(rdr.GetOrdinal("lilocn"));
                    }
                }
            }
            return _retValue;
        }

Если в методе нет строк, то в лоте, который будет возвращен, заполнено только одно поле данных. Вот так я проверяю вышеупомянутый слой бизнес, если он был успешным или нет.

Мне это не нравится Кто-то упомянул кортеж как решение.

Я предполагаю, что мой метод вернет tuple<MyObject, bool> например?

Дополнительная информация: Я хотел бы также иметь возможность вернуть ответ на вопрос "почему объект нулевой?". Я думаю о возвращении кортежа объекта и ENUM с указанием причины.

ОБНОВИТЬ:

Я думаю, что я пойду по этому пути:

Возврат NULL-ссылки на объект из метода доступа к данным и возврат метода BLL tuple<Myobject,ENUMreason>

1 ответ

Решение

Как насчет того, чтобы просто вернуть null и проверить, есть ли какие-либо данные в слое данных, чтобы в любом месте, где вы их используете, поведение было одинаковым.

Другие вопросы по тегам