Вот мой основной метод тест, ошибка происходит на линиине удается получить данные в строке данных
target.DeletePHIParmYield (rowToDelete);
[TestMethod()]
public void DeletePHIParmYieldTest()
{
CommonPHIEditorBL_Accessor target = new CommonPHIEditorBL_Accessor();
target.mCommonPHIEditorDS = new CommonPHIEditorDS();
PHIEditorUniquePHIRowDefinition rowToDelete = new PHIEditorUniquePHIRowDefinition();
//Test Case 1
AddPHIYieldInfo(target.mCommonPHIEditorDS.PHIYieldParm, 1, 12, 123, 1234, 2001);
rowToDelete.ItemID = "2001";
rowToDelete.MetricKeyID = "12";
rowToDelete.ProjectName = "Test";
rowToDelete.ProjectType = "MOR";
rowToDelete.Status = "MOR";
rowToDelete.SubObject = "CFA";
rowToDelete.Factory = "VF";
rowToDelete.ParameterName = "BI%";
target.DeletePHIParmYield(rowToDelete); //error inside here
//Assert.AreEqual(0, target.mCommonPHIEditorDS.PHIYieldParm.Rows.Count);
Assert.AreEqual(0, target.mCommonPHIEditorDS.PHIYieldParm.Rows.Count);
}
Перейти внутри функции DeletePHIParmYield (rowToDelete):
public void DeletePHIParmYield(PHIEditorUniquePHIRowDefinition rowToDelete)
{
int id;
CommonPHIEditorDS.PHIYieldParmRow sourceRow = GetPHIRow(rowToDelete);
if (sourceRow == null)
throw new Exception("Row cannot be located!");
if (!sourceRow.IsMetricModelInputIDNull())
id = sourceRow.MetricModelInputID;
else
id = sourceRow.InputID;
DeletePHIYieldParmDataAndAcceptChanges(sourceRow);
sourceRow.Delete();
if (id < 0 && sourceRow.RowState != DataRowState.Detached) //this record is not in DB. No need to call to DB
sourceRow.AcceptChanges();
}
Перейти к внутренней CommonPHIEditorDS.PHIYieldParmRow sourceRow = GetPHIRow (rowToDelete);
public CommonPHIEditorDS.PHIYieldParmRow GetPHIRow(PHIEditorUniquePHIRowDefinition newRowObj)
{
CommonPHIEditorDS.PHIYieldParmRow row = null;
string filter = ConstructFilterUsingPHIEditorUniquePHIRowDefinitionObject(newRowObj);
CommonPHIEditorDS.PHIYieldParmRow[] existingRow
= (CommonPHIEditorDS.PHIYieldParmRow[])MCommonPhiEditorDs.PHIYieldParm.Select(filter, string.Empty, DataViewRowState.CurrentRows);
//var existingRow = from filter in MCommonPhiEditorDs.PHIYieldParm
// where filter.MetricTypeName.StartsWith("BI")
// select existingRow;
//row = existingRow.FirstOrdefault();
if (existingRow != null && existingRow.Length == 1)
row = existingRow[0];
return row;
}
Данные фильтр: (я изменить на "LIKE" вместо "=", чтобы попробовать)
MetricTypeName = 'BI%' AND Factory = 'VF' И Status = ' MOR»И Имя_проекта = 'Тест' И ProjectType = 'MOR' И SubObjectName = 'КФА' И ItemID = '2001' и MetricKeyID = '12' И MetricModelInputID IS NULL
PHIYieldParmData Таблица содержит столбец :(без данных, я вручную помещаю данные, чтобы попробовать)
DataID, MetricModelInputID, MetricID, InputID, ItemID, DateKey, Value, HrzDisplay, HorizonID, MetricModelID, AggregateItemChar
Я не мог получить данные при переходе через линию
строка = existingRow [0];
он не может пройти через указанную выше линию, но сразу же перепрыгните на это. Из-за условия if else. Однако, есть проблема в моем existingRow, я не мог загрузить данные в этот
return row;
Моя строка содержит список данных, в то время как existingRow пуст
Полный код:
public CommonPHIEditorDS.PHIYieldParmRow GetPHIRow(PHIEditorUniquePHIRowDefinition newRowObj)
{
CommonPHIEditorDS.PHIYieldParmRow row = null;
string filter = ConstructFilterUsingPHIEditorUniquePHIRowDefinitionObject(newRowObj);
CommonPHIEditorDS.PHIYieldParmRow[] existingRow
= (CommonPHIEditorDS.PHIYieldParmRow[])MCommonPhiEditorDs.PHIYieldParm.Select(filter, string.Empty, DataViewRowState.CurrentRows);
if (existingRow != null && existingRow.Length == 1)
row = existingRow[0];
return row;
}
_ "из-за, если другое условие" _ которое еще? Вы использовали отладчик, что такое значение 'filter'? В общем, я бы предпочел Linq-To-DataSet. –
Да, из-за if-else, но я полагаю, что для соответствия условию if, «существующееRow» не должно быть null, но существующееRow возвращает меня null.Внутренний фильтр «MetricTypeName =« BI% »AND Factory = 'VF' AND Status = 'MOR' AND ProjectName = 'Test' AND ProjectType = 'MOR' AND SubObjectName = 'CFA' AND ItemID = '2001' AND MetricKeyID = '1' AND MetricModelInputID IS NULL " –
проблема возникает здесь" CommonPHIEditorDS.PHIYieldParmRow [] existingRow = (CommonPHIEditorDS.PHIYieldParmRow []) MCommonPhiEditorDs.PHIYieldParm.Select (фильтр, string.Empty, DataViewRowState.CurrentRows); ", почему сделать, что «existingRow» мне ничего не возвращает? –