在控制器中连接两个语句

时间:2012-04-01 18:25:05

标签: sql asp.net-mvc-3 linq

在控制器中组合两个语句时遇到问题。这两个陈述都有效,但无法将它们作为一个元素运作。

第一个声明是当用户的用户名与登录的用户名匹配时显示用户的数据 这很好。

public ViewResult Index()
    {
        var myrecords = db.Customers.Where(UserData => UserData.UserName.Equals
                (User.Identity.Name)).ToList();

        return View(myrecords);
    }

第二个语句用于连接表并显示数据。这很好用

  var caradverts = db.CarAdverts.Include(c => c.BodyType).Include(c => c.Car).Include(c => c.Colour).Include(c => c.Customer).Include(c => c.EngineSize).Include(c => c.fuel).Include(c => c.SalesPlan).Include(c => c.Transmission).Include(c => c.year);



        return View(caradverts.ToList());

现在麻烦的是将两个语句连接成一个,因此它只显示登录用户的数据。

欢迎任何建议

1 个答案:

答案 0 :(得分:1)

这个怎么样:

var caradverts = db.CarAdverts
                   .Include(c => c.BodyType)
                   .Include(c => c.Car)
                   .Include(c => c.Colour)
                   .Include(c => c.Customer)
                   .Include(c => c.EngineSize)
                   .Include(c => c.fuel)
                   .Include(c => c.SalesPlan)
                   .Include(c => c.Transmission)
                   .Include(c => c.year)
                   .Where(c => c.Customer.UserName == User.Identity.Name)
                   .ToList();

你真的需要所有这些Include陈述吗?看起来大多数都是指普通的原始属性,而不是相关的实体。

另外,因为在第一种情况下你很可能想要来自用户的数据,我会像这样重写你的查询:

 var userRecord = db.Customers
                    .SingleOrDefault(u => u.UserName == User.Identity.Name);

然后相应地更新您的模型/视图以处理单个Customer记录而不是集合。