【问题标题】:Filter the results of a query using conditions in asp.net with entity framework使用带有实体框架的 asp.net 中的条件过滤查询结果
【发布时间】:2017-11-06 03:24:48
【问题描述】:

我想知道有多少人在 especify 本地,使用此人的进入和退出验证。如果他已经在本地输入,那么他将生成一个带有TrCode = "C0" 的事务。当他离开这个地方时,他会生成一个TrCode = "CI"。还有其他类型的 TrCode,但对这种验证没有用处。我有一个查询返回给我这个结果如下:

        var query = from a in context.CardDB
                    join c in context.tblTransaction on a.CardNo equals c.CardNo
                    where c.TrCode == "C0" || c.TrCode == "CI"
                    where c.TrSiteCode == sitecode
                    select c;

现在我有了所有具有 TrCode == "C0" 或 TrCode == "CI" 的行。但结果给了我雇主(CardDB)所做的所有交易。所以结果给出了很多不同雇主的交易。有时一些雇主会进行 2 次甚至 3 次交易,例如,当他到达时,当他出去吃午饭时,然后他回来等等。

我必须在网格中显示通常交易数量比TrCode == "C0" 多于TrCode == "CI" 的雇主。所以,我必须做的是只计算具有相同 ID 的雇主的交易,并且在网格中显示它时,只显示该雇主的一行而不是所有行。

已经开始了,谢谢!

【问题讨论】:

  • CardDB 中有哪些列/字段?
  • 有 ID、CardNo(我在 tblTransaction 表中用作外键)和 TrSiteCode 用于过滤雇主的工作场所
  • 我不擅长使用“SQL 风格”的 LINQ,尤其是针对不在我面前的数据库模型。但从根本上讲,您需要按 TrSiteCode 和 TrCode 进行分组,然后使用 Sum。这将为您提供三列 - TrSiteCode、TrCode 和 Sum。

标签: c# asp.net visual-studio entity-framework


【解决方案1】:
var queryNumberC0 = query.Where(c => c.TrCode == "C0").Select(c => c.ID).GroupBy(c => c.Value).ToList();
var queryNumberC1 = query.Where(c => c.TrCode == "C1").Select(c => c.ID).GroupBy(c => c.Value).ToList();

并获取ID的编号y(Key是客户的ID):

int y = [Customer's ID];
int temp = queryNumberC0.Find(c => c.Key == y);

您不必在查询结束时指定 ToList(),对结果做您想做的事情。我只是觉得浏览起来更容易

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-02
    • 1970-01-01
    • 1970-01-01
    • 2020-10-20
    • 2018-05-28
    • 1970-01-01
    • 2011-12-18
    相关资源
    最近更新 更多