Как использовать .tag в запросе LINQ и перейти к другому методу? - PullRequest
0 голосов
/ 24 мая 2011

Я пытаюсь построить объект результата из запроса, который получает предложение where из тега элемента списка.Вот код, который строит список:

var holds = (from a in db.Record_HoldDatas
             join b in db.LUT_Flavors on a.Flavor equals b.ID
             where a.HoldStatus == "Open"
             orderby a.DateOpened descending
             select new { a.HoldID, a.Package, b.flavor, a.DateOpened }).ToList();

DateTime thenTime;
TimeSpan span;
foreach (var items in holds)
{
    ListViewItem item = new ListViewItem(items.HoldID.ToString());
    item.Tag = (int)items.HoldID;

    //determine age
    thenTime = (DateTime)items.DateOpened;
    span = DateTime.Now - thenTime;

    //add age
    item.SubItems.Add(span.TotalHours.ToString("0.0"));
    lstvHolds.Items.Add(item);

    //add flavor
    item.SubItems.Add(items.flavor.ToString());

    //add package
    item.SubItems.Add(items.Package.ToString());

    if (span.TotalHours >= 48)
    {
        item.BackColor = Color.Red;
    }
    else if (span.TotalHours >= 36 && span.TotalHours < 48)
    {
        item.BackColor = Color.Yellow;
    }
    else
    {
        item.BackColor = Color.Green;
    }
}

отсюда я хочу использовать значение тега в выбранном элементе, чтобы создать новый объект из DataContext, используя тег в качестве ограничения в WHEREпредложение:

private void lstvHolds_DoubleClick(object sender, EventArgs e)
{        
    //create instance of the selected record
    var existingRecord =  from a in db.Record_HoldDatas
                          where a.HoldID == lstvHolds.SelectedItems[0].Tag
                          select a;

    //open the hold window for viewing            
    frmNewFGHold viewHold = new frmNewFGHold("view", existingRecord);
    viewHold.Show();
}

Record_HoldData - это объект, созданный из текста данных.Record_HoldData.HoldID имеет тип int.Ошибка, которую я получаю:

Оператор '==' нельзя применить к операндам типа 'int' и 'object'

Когда я отображаю object.ToString(), он показывает правильное значение, но когда я пытаюсь разобрать его в int, я получаю эту ошибку:

Не удается неявно преобразовать тип 'System.Linq.IQueryable' в 'Coke_Hold_Database.Record_HoldData'.Существует явное преобразование (вы пропустили приведение?

, что странно, потому что я не пропустил бы приведение, если бы попытался преобразовать его. Я попытался выполнить разбор, преобразование и приведение.Все с той же ошибкой. Я в тупике. Любая помощь?

Ответы [ 2 ]

1 голос
/ 24 мая 2011

Оказалось, что дело было в том, чтобы сообщить компилятору, что в данном конкретном случае есть только один результат. Я добавил Single(), и это сработало:

int ID = (Int32)lstvHolds.SelectedItems[0].Tag;

//create instance of the selected record
Record_HoldData existingRecord = (Record_HoldData)
(from a in db.Record_HoldDatas
where a.HoldID == ID
select a).Single();

//open the hold window for viewing            
frmNewFGHold viewHold = new frmNewFGHold("view", existingRecord);
viewHold.Show();
1 голос
/ 24 мая 2011

Распакуйте int, сохраненное в свойстве Tag:

where a.HoldID == (int)lstvHolds.SelectedItems[0].Tag
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...