我试图在Julia Lerman的书“编程实体框架”第2版中遵循一个例子,以下代码对我不起作用:
override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
if editingStyle == .Delete {
allItems[indexPath.section].removeAtIndex(indexPath.row)
tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
} else if editingStyle == .Insert {
let newData = DataItem(title: "New Data", subtitle: "", imageName: nil)
allItems[indexPath.section].append(newData)
tableView.insertRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
}
}
override func setEditing(editing: Bool, animated: Bool) {
super.setEditing(editing, animated: animated)
if editing {
tableView.beginUpdates()
for (index, sectionItems) in allItems.enumerate() {
let indexPath = NSIndexPath(forRow: sectionItems.count, inSection: index)
tableView.insertRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
}
//tableView.beginUpdates()
tableView.setEditing(true, animated: true)
tableView.endUpdates()
} else {
tableView.beginUpdates()
}
我收到以下错误:
Argument2:无法从'string'转换为'System.Linq.Expresions.Expression>'。
如何访问ObjectQuery的Query Builder方法?我正在使用Entity Framework 6,本书中的示例正在使用Entity Framework 4.我的上下文类继承自ObjectQuery<Contact> contacts = context.Contacts
.Where("it.FirstName = 'Robert'")
,在本书的示例中,上下文类继承自DbContext
。
查询构建器方法是否仍在Entity Framework 6中使用?
答案 0 :(得分:2)
我的上下文类从DbContext继承,在本书的示例中,上下文类从ObjectContext继承。
首先,您必须像这样将上下文从DbContext更改为ObjectContext:
var objectContext = (context as IObjectContextAdapter).ObjectContext;
现在,您可以像这样使用查询生成器方法:
var query = objectContext.CreateObjectSet<Customer>().Where("it.FirstName='Robert'").OrderBy("it.LastName");
这是整个示例:
private static void OrderByAndWhereUsingEntitySQL_AndQueryBuilderMethods()
{
using (var context = new AWEntities())
{//using Entity SQL with helper Query Builder Methods
//dbContext does not have a Where method that accepts esql string statements
//get to the dbContext's ObjectContext class
var objectContext = (context as IObjectContextAdapter).ObjectContext;
//now we can use the Where method that understands esql string statements
var query = objectContext.CreateObjectSet<Customer>().Where("it.FirstName='Robert'").OrderBy("it.LastName");
//execute the query
var customers = query.ToList();
foreach (var cust in customers)
Debug.WriteLine(cust.LastName.Trim() + ", " + cust.FirstName);
}
}
答案 1 :(得分:0)
如果你想使用一个字符串,你需要使用参数化,而Where需要第二个带有值的参数。
我认为使用带有lambda表达式的直接LINQ更清晰。
尝试:
char *
答案 2 :(得分:0)
标准Linq查询不会为类型为Where
的{{1}}提供重载
Microsoft提供了一个NuGet库,用于将字符串解析为Lambda表达式,然后可以在名为 System.Linq.Dynamic 的Linq查询中使用,可在此处找到: