如何在LINQ查询中使用.tag并传递给另一种方法?

| 我正在尝试通过查询来构建结果对象,该查询从列表项上的标签获取其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;
    }
}
从这里开始,我想使用所选项目中标签的值,使用WHERE子句中的标签作为约束,从DataContext创建一个新对象:
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 \'。   存在显式转换(您是否缺少演员表? 这很奇怪,因为如果我尝试将其转换,我将不会丢失演员表。我尝试了解析,转换和转换。都具有相同的错误。我很沮丧。有什么帮助吗?     
已邀请:
取消存储在
Tag
属性中的
int
的装箱:
where a.HoldID == (int)lstvHolds.SelectedItems[0].Tag
    
事实证明,在这种特殊情况下,让编译器知道只有一个结果是一个问题。我加了5英镑,就可以了:
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();
    

要回复问题请先登录注册