LINQ to Entities无法识别方法get_Item(Int32)

时间:2018-01-30 19:40:50

标签: c# entity-framework

我希望有人可以帮助我。我有一个相对简单的程序,它查询来自实体的数据并将查询绑定到dataGridView1,但我得到了以下错误,我试图在没有进展的情况下解决超过30分钟。

  

System.NotSupportedException:'LINQ to Entities无法识别方法'System.Windows.Forms.DataGridViewCell get_Item(Int32)'方法,并且此方法无法转换为商店表达式。'

using (var context = new myContext())
{
    var query = context.mySoftWare
        .Where(s => s.Software.Contains(dataGridView2.SelectedRows[0].Cells[0].Value.ToString()))
        .Select(r => new {r.SID, r.Software,r.Vendor,r.Version });

    dataGridView1.DataSource = query.ToList();
}

1 个答案:

答案 0 :(得分:2)

您在Where中编写的代码已翻译到SQL。执行此操作的引擎并不知道如何将dataGridView2.SelectedRows[0].Cells[0].Value.ToString()转换为SQL。

解决这个问题的简单方法是使该值成为自己的变量

var value = dataGridView2.SelectedRows[0].Cells[0].Value.ToString();

var query = context.mySoftWare
    .Where(s => s.Software.Contains(value))
    .Select(r => new { r.SID, r.Software, r.Vendor, r.Version });

dataGridView1.DataSource = query.ToList();

现在让我们只希望sql引擎知道如何翻译"包含"。