私は、プロパティと値に基づいてクエリに 'where'句を追加する関数を作成しようとしています。これは私の機能の非常に簡単なバージョンです。LinqとGenericsに関するヘルプ。クエリ内でのGetValueの使用
Private Function simplified(ByVal query As IQueryable(Of T), ByVal PValue As Long, ByVal p As PropertyInfo) As ObjectQuery(Of T)
query = query.Where(Function(c) DirectCast(p.GetValue(c, Nothing), Long) = PValue)
Dim t = query.ToList 'this line is only for testing, and here is the error raise
Return query
End Function
エラーメッセージがある:「System.ObjectのCompareObjectEqual(System.Objectの、System.Objectのブール)」メソッドLINQは、エンティティへの方法を認識しない、この方法は、ストア式に変換することができません。
aのように見えるのは、linqクエリ内でGetValueを使用できません。これを他の方法で達成することはできますか?
C#/ VBで回答を投稿してください。あなたはより快適に感じさせるものを選んだ。
おかげ
EDIT:私はまた、あなたはDirectCast
を引き出し、代わりにラムダパラメータに反映しようとしたことがあり、同じ結果
Private Function simplified2(ByVal query As IQueryable(Of T))
query = From q In query
Where q.GetType.GetProperty("Id").GetValue(q, Nothing).Equals(1)
Select q
Dim t = query.ToList
Return query
End Function
テスト済みで働いています。完璧。ありがとう。 – Jonathan
こんにちはTom。あなたは私にそのリンクを提供することができますか、なぜ表現木と一緒に働くのですが、lambdaを直接使っていないのかを簡単に説明できますか? – Ph0en1x