如何从我的模型中的另一个表添加Sum?

时间:2017-06-29 14:53:36

标签: linq linq-to-sql asp.net-mvc-5

所以我在控制器中有这样的View设置:

using Microsoft.VisualStudio.TestTools.UnitTesting; 
using Moq; 
using System.Collections.Generic; 
using System.Data.Entity; 
using System.Linq; 

namespace TestingDemo 
{ 
    [TestClass] 
    public class QueryTests 
    { 
        [TestMethod] 
        public void GetAllBlogs_orders_by_name() 
        { 
            var data = new List<Blog> 
            { 
                new Blog { Name = "BBB" }, 
                new Blog { Name = "ZZZ" }, 
                new Blog { Name = "AAA" }, 
            }.AsQueryable(); 

            var mockSet = new Mock<DbSet<Blog>>(); 
            mockSet.As<IQueryable<Blog>>().Setup(m => m.Provider).Returns(data.Provider); 
            mockSet.As<IQueryable<Blog>>().Setup(m => m.Expression).Returns(data.Expression); 
            mockSet.As<IQueryable<Blog>>().Setup(m => m.ElementType).Returns(data.ElementType); 
            mockSet.As<IQueryable<Blog>>().Setup(m => m.GetEnumerator()).Returns(0 => data.GetEnumerator()); 

            var mockContext = new Mock<BloggingContext>(); 
            mockContext.Setup(c => c.Blogs).Returns(mockSet.Object); 

            var service = new BlogService(mockContext.Object); 
            var blogs = service.GetAllBlogs(); 

            Assert.AreEqual(3, blogs.Count); 
            Assert.AreEqual("AAA", blogs[0].Name); 
            Assert.AreEqual("BBB", blogs[1].Name); 
            Assert.AreEqual("ZZZ", blogs[2].Name); 
        } 
    } 
}

问题是从BuildingInfos中获取numberofres和numberofcommer的总和。 使用.Select给出了错误:

错误CS0411无法从用法推断出方法'Queryable.Select(IQueryable,Expression&gt;)'的类型参数。尝试明确指定类型参数。

如何正确编写此LINQ语句?

感谢。

1 个答案:

答案 0 :(得分:1)

您无法修改选择内的对象(您只能创建新对象)。此外,您无法向现有对象添加新属性。

我们假设OnboardModel定义了totalrestotalcom属性。

var query = context.onboard_BuildingInfos
                   .Where(x => x.buildprojectID == pix)
                   .GroupBy(x => x.buildprojectID);

foreach(var g in query)
{
        model.totalres = g.Sum(b => b.numberofres);
        model.totalcom = g.Sum(b => b.numberofcommer);
}