0

我有一个实体查询:

Location location = new Location();

var loc = from l in location.name
          where location.active = true
          select l;

return View(loc.ToList());

和代码,当运行时抛出一个问题,因为名称和活动都是空的。这很好,但是,有没有办法说:如果不是空返回?这会像loc在返回之前询问是否为空一样简单吗?

如果是这样,我该怎么做?

更多详细信息

我收到错误消息:

说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.ArgumentNullException:值不能为空。参数名称:来源

在线发生:

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>();
        }
    }
}

注意:这种方法使用代码优先方法,我的数据库中有一个位置条目,它有一个名称,并且它的“活动”设置为 true。所以我不明白为什么这会引起轰动。

4

3 回答 3

0

您的位置将永远为空,如果在默认构造函数中它不填充字段/属性

尝试这个

var location = new Location { name= "dsd", active = true};

var tmp = location.FirstOrDefault(x=>x.active);

var loc = tmp == null ? String.Empty : tmp.name;
于 2013-04-11T20:15:33.997 回答
0

如果要返回单个位置,请使用该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")
}

如果您正在寻找一个集合,我们ToList()在您的表达,您可以检查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")
}
于 2013-04-11T20:18:35.377 回答
0

你的 Linq 查询的源集合IEnumerable<char>是由string(我猜Location.Name是 a 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);

但这与实体框架无关。这只是一个内存查询(LINQ-to-Objects)。

于 2013-04-11T20:37:03.310 回答