Asp.net mvc 3 实体查询返回空值,如何检查?
我有一个实体查询:Asp.net mvc 3 实体查询返回空值,如何检查?,asp.net-mvc-3,entity-framework,Asp.net Mvc 3,Entity Framework,我有一个实体查询: Location location = new Location(); var loc = from l in location.name where location.active = true select l; return View(loc.ToList()); 当运行时,代码抛出一个问题,因为name和active都为null。这很好,但是,有没有一种方式可以说:如果不是空返回?这会像在返回前询问loc是否为空一样简单吗
Location location = new Location();
var loc = from l in location.name
where location.active = true
select l;
return View(loc.ToList());
当运行时,代码抛出一个问题,因为name和active都为null。这很好,但是,有没有一种方式可以说:如果不是空返回?这会像在返回前询问loc
是否为空一样简单吗
如果是这样,我该怎么做
进一步详情
我得到一个错误:
描述:在执行过程中发生未处理的异常
当前的web请求。请查看堆栈跟踪以了解更多信息
有关错误的信息及其在代码中的来源
异常详细信息:System.ArgumentNullException:值不能为null。
参数名称:源
这在网上发生:
var loc = (from l in location.name
我的上下文类如下所示:
using System;
using System.Data.Entity;
using LocationApp.Models;
using System.Data.Entity.ModelConfiguration.Conventions;
namespace LocationApp.DAL
{
public class LocationAppContext : DbContext
{
public DbSet<Content> Contents { get; set; }
public DbSet<Location> Locations { get; set; }
public DbSet<ServiceAssignment> ServiceAssignments { get; set; }
public DbSet<Service> Services { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
}
}
使用系统;
使用System.Data.Entity;
使用LocationApp.模型;
使用System.Data.Entity.ModelConfiguration.Conventions;
名称空间位置app.DAL
{
公共类位置AppContext:DbContext
{
公共数据库集内容{get;set;}
公共数据库集位置{get;set;}
公共数据库集服务分配{get;set;}
公共数据库集服务{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove();
}
}
}
注意:此方法使用代码优先方法,我的数据库中有一个位置条目,它有一个名称,其“活动”设置为true。所以我不明白为什么会出现这种情况。如果在默认构造函数中没有填充,那么您的位置将永远为空 字段/属性 试试这个
var location = new Location { name= "dsd", active = true};
var tmp = location.FirstOrDefault(x=>x.active);
var loc = tmp == null ? String.Empty : tmp.name;
如果要返回单个位置,请使用
FirstOrDefault
方法
此外,还需要创建DBContext类的对象,并访问其Locations
属性以获取位置
using(var db=new LocationAppContext())
{
var loc = (from l in db.Locations
where l.active == true
select l).FirstOrDefault();
if(loc!=null)
return View(loc);
else
return View("NotFound")
}
如果要查找集合,请在表达式上使用usToList()
,您可以检查Count
属性以查看是否返回了任何项目
using(var db=new LocationAppContext())
{
var loc = (from l in db.Locations
where l.active == true
select l).ToList();
if(loc.Count>0)
return View(loc);
else
return View("NotFound")
}
Linq查询的源集合是一个
IEnumerable
,它由string
实现(我猜Location.Name
是一个string
),您将返回一个字符列表到视图中。(你真的想要这个吗?)
无论如何,源集合不能为null
。您必须在Linq查询之前捕获此案例。如果它是null
,则根本不能使用此Linq查询
Location location = new Location();
List<char> loc = null;
if (location.name != null)
loc = (from l in location.name
where location.active.HasValue && location.active.Value
select l).ToList();
else
loc = new List<char>();
return View(loc);
Location-Location=新位置();
List loc=null;
if(location.name!=null)
loc=(从location.name中的l开始)
其中location.active.HasValue&&location.active.Value
选择l).ToList();
其他的
loc=新列表();
返回视图(loc);
但这与实体框架无关。这只是一个内存中的查询(LINQ到对象)。只是需要添加一些东西,我一直得到一个异常:值不能为null。参数名称:source.@TheWebs您可能还需要在LINQ表达式中使用2
=
。var loc=(从location.name中的l开始。name
我使用代码优先的方法。因此,我不确定是否应该在我的模型中使用某些东西…数据库中有一个位置是location
您的DBContext类对象?它看起来怎么样?@TheWebs:请发布相关的DBContext类