我是在Webforms中使用EF6的新手。我正在尝试更新表中唯一没有ID的行,它只是应用程序的参数配置表。
我在formview上有此更新方法。当我尝试加载项目时,它给了我错误。我认为我在这里做错了,但是不确定我需要做什么。我对linq一无所知。
错误11无法将类型'System.Linq.IQueryable'隐式转换为'InventarioCiclico.xInventarioConfigs'。存在显式转换(是否缺少强制转换?)C:\ Users \ A0H79224 \ Documents \ Visual Studio 2013 \ Projects \ InventarioCiclico \ InventarioCiclico \ Account \ Admin \ ConfigurarInventario.aspx.cs 73 20 InventarioCiclico
// The id parameter name should match the DataKeyNames value set on the control
public void fvInventarioConfigs_UpdateItem(xInventarioConfigs configs)
{
InventarioCiclico.xInventarioConfigs item = configs;
InventarioCiclicoContext context = new InventarioCiclicoContext();
// Load the item here, e.g. item = MyDataLayer.Find(id);
item = (from c in context.xInventarioConfigs select c).Take(1);
if (item == null)
{
// The item wasn't found
ModelState.AddModelError("", String.Format("Item with id was not found"));
return;
}
TryUpdateModel(item);
if (ModelState.IsValid)
{
context.SaveChanges();
// Save changes here, e.g. MyDataLayer.SaveChanges();
}
}
答案 0 :(得分:2)
Take 也会返回 IQueryable 。您可以使用以下方法作为快速解决方案:
item = (from c in context.xInventarioConfigs select c).Take(1).FirstOrDefault();
或者即使没有Take as FirstOrDefault也会选择一行。
答案 1 :(得分:1)
Take返回一个IQueryable,其中可能仅包含一项,但仍然是各种集合。如果您使用Take(1)仅选择一条记录,则最好直接选择First(如果结果集中没有记录,请谨慎选择)或FirstOrDefault
item = (from c in context.xInventarioConfigs select c).FirstOrDefault();