c# – Linq匿名类型成员必须在Sub Query中声明
发布时间:2020-12-15 22:11:08 所属栏目:百科 来源:网络整理
导读:我正在尝试将 this SQL查询转换为Linq,以在asp MVC中的View中返回, Linq的预期产出: TotalPoints Name 231 John 我在第二个选择新的子查询中得到此错误: Invalid expression term ‘.’ Invalid anonymous type member declarator. Anonymous type members
我正在尝试将
this SQL查询转换为Linq,以在asp MVC中的View中返回,
Linq的预期产出: TotalPoints Name 231 John 我在第二个选择新的子查询中得到此错误:
Linq查询到目前为止: public ActionResult UserTotal() { List<TotalPointsUser> onetotal = from t in ( (from LoyaltyDetailsTable in dbpoints.LoyaltyDetailsTable where LoyaltyDetailsTable.CustomerTable.CustomerId == 1 group new {LoyaltyDetailsTable.CustomerTable,LoyaltyDetailsTable.LoayaltyPointsTable} by new { LoyaltyDetailsTable.CustomerTable.Name,LoyaltyPointsId = LoyaltyDetailsTable.LoayaltyPointsTable.LoyaltyPointsId,Points = LoyaltyDetailsTable.LoayaltyPointsTable.Points,CustomerId = LoyaltyDetailsTable.CustomerTable.CustomerId } into g select new TotalPointsUser{ CustomerId = g.Key.LoyaltyPointsId == 4 ? (from RedeemPointsTable in dbpoints.RedeemPointsTable where RedeemPointsTable.CustomerId == 1 select new { RedeemPointsTable.Amount }).Count(p => p.Amount != null) : g.Count(p => p.CustomerTable.CustomerId != null),Name=g.Key.Name,Points = g.Key.LoyaltyPointsId == 4 ? ( (from RedeemPointsTable in dbpoints.RedeemPointsTable where RedeemPointsTable.CustomerId == 1 select new { RedeemPointsTable.Amount }).Sum(p => p.Amount) * g.Key.Points) : g.Sum(p => p.LoayaltyPointsTable.Points) })) select new { CustomerId = t.Sum(p => p.CustomerId),// here is the error Points= t.Sum(p => p.Points),// and here Name = ((from CustomerTable in dbpoints.CustomerTable where CustomerTable.CustomerId == 1 select new { CustomerTable.Name }).First().Name) } .ToList(); return View(onetotal); } 型号类: public class TotalPointsUser { public int CustomerId { get; set; } public string Name { get; set; } public int Points { get; set; } } 我是linq的新手,我可以知道必须做出哪些改变? Ant帮助会很棒. 解决方法
您的查询结构是:
from t in ( ) select new { Column1 = .Sum(p => p.TotalUserActions),// here is the error Column2 = .Sum(p => p.AllTotalPoints),// and here } 您必须在结果中使用t别名,如下所示: from t in ( ) select new { Column1 = t.Sum(p => p.TotalUserActions),Column2 = t.Sum(p => p.AllTotalPoints),} 但是,您必须在生成的查询中包含此类字段,现在不是这样. 我认为您应该在SQL中编写查询并逐步将其传输到LINQ.现在它非常令人困惑并且产生错误. 更新: from t in ( ) select new { Column1 = t.Sum(p => p.TotalUserActions),Column2 = t.Sum(p => p.Points),} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |