Вам действительно следует включить Option Strict On
в свойствах проекта, а также в параметрах IDE, поэтому для всех будущих проектов это будет On
по умолчанию. Если вы сделаете это, то этот код даже не скомпилируется. Это заставит вас поступить так, как вы должны, и приведете SelectedValue
, который является типом Object
, к фактическому типу базового объекта, который предположительно равен String
или Integer
. Вы можете использовать DirectCast
или CInt
, CStr
или подобное для выполнения приведения, например
Where Product.Type = CInt(cmbProducts.SelectedValue)
В идеале вы должны присваивать результат этого приведения переменной и использовать его в своем запросе LINQ. Важно помнить, что, хотя синтаксис LINQ всегда одинаков, каждый поставщик LINQ имеет свою реализацию. LINQ to Entities преобразует ваш запрос в SQL, который он может выполнить в отношении базы данных, и это означает, что некоторые вещи, которые поддерживаются LINQ в целом и, таким образом, будут компилироваться, фактически не будут выполняться во время выполнения для LINQ to Entities. Как правило, это хорошая идея - держать что-нибудь экзотическое в своих EF-запросах. В этом случае вы, вероятно, будете в порядке, но это хорошая привычка, так как это поможет избежать тонких проблем.