我想根據KeyValuePair
列表查詢表。隨着模型的第一種方式,我可以做到以下幾點:實體框架4.0代碼優先動態查詢
var context = new DataContext();
var whereClause = new StringBuilder();
var objectParameters = new List<ObjectParameter>();
foreach(KeyValuePair<string, object> pair in queryParameters)
{
if (whereClause.Length > 0)
whereClause.Append(" AND ");
whereClause.Append(string.Format("it.[{0}] = @{0}", pair.Key));
parameters.Add(new ObjectParameter(pair.Key, pair.Value));
}
var result = context.Nodes.Where(whereClause.ToString(), parameters.ToArray());
現在我使用代碼優先方法和this Where method不再可用。幸運的是,我看到一篇文章的地方(我不記得了)這表明,我可以在DbContext
轉換爲IObjectContextAdapter
然後調用CreateQuery
這樣的:
var result = ((IObjectContextAdapter)context)
.ObjectContext.CreateQuery<Node>(whereClause.ToString(), parameters.ToArray());
不幸的是,這將引發一個錯誤:
無法在當前範圍或上下文中解析'{ColumnName}'。確保所有引用的變量都在作用域中,所需的模式被加載,並且名稱空間被正確引用。
其中{ColumnName}是在whereClause
中指定的列。
任何想法如何動態查詢DbSet
給定的鍵/值對列表?所有的幫助將不勝感激。
我們對此使用System.Linq.Dynamic。這是一個附加,但值得恕我直言。不是你問的問題,但它是一個可能的解決方案。 – 2011-06-09 18:11:46
看起來像我在找什麼。我會檢查出來並報告回來......感謝提示! – 2011-06-09 18:47:29
再次感謝克雷格!我真的很喜歡你的方法,它的工作原理。 – 2011-06-09 22:06:09