加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

我在第二个选择新的子查询中得到此错误:

Invalid expression term ‘.’

Invalid anonymous type member declarator. Anonymous type members must
be declared with a member assignment,simple name or member access.

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.现在它非常令人困惑并且产生错误.

更新:
你有错误,因为你的代码不包含这样的文件.什么应该包含字段TotalUserActions和AllTotalPoints?尝试对所有Points字段求和,但不能说TotalPserActions是什么:

from t in (
)
select new {
  Column1 = t.Sum(p => p.TotalUserActions),Column2 = t.Sum(p => p.Points),}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读