【问题标题】:Linq Entity FrameworkLinq 实体框架
【发布时间】:2018-11-30 16:52:20
【问题描述】:

我已经尝试了好几个小时来创建一个具有 distinct 和 orderby 的 Linq 查询。在此article 中描述了与此有关的一般问题。 我找到解决方案的唯一方法是创建一个普通的 SQL 查询

SELECT TOP (10) [DATA]
FROM TestResult
inner join TestResultRelated on TestResultRelated.TestResult = TestResult.ID
WHERE TestResultRelated.PATH = 'TestResultRelatedAdditionalData.SoftwareVersion'
AND TestResult.USER_LOGIN_NAME = 'emilwkj'
AND TestResultRelated.DATA != ''
group by TestResultRelated.DATA order by max([START_DATE_TIME]) desc

我不需要解决这个确切问题的方法,但这里有一个关于该问题的示例:

Table 1:
ID | DateUsed | Version
1 | 01/01/2018 | 1.0
2 | 02/03/2018 | 1.1
3 | 05/05/2018 | 1.0
4 | 04/06/2018 | 1.4

在上表中,如何在 LinQ 中提取最后使用的 3 个不同的软件版本?

这可以在 LinQ 中实现吗?

【问题讨论】:

  • 我们需要查看您的 C# 代码才能提供帮助,即您的实体类和 DbContext。您要实现的目标应该相当简单。
  • 你的 linq 代码在哪里?
  • 所以问题是我需要找到最后使用的前十个软件版本。而且你不能在 Linq 或任何东西中订购不同的东西。我无法向您展示 DBContext,因为这是我工作的公司内部的。对不起大家。但是,如果可能的话,将 SQL 转换为 LinQ 不是很简单吗?您不必为我编写确切的代码。我已经使用 LinQ 很长时间了。
  • 请分享您的 C# 代码,以便我们为您提供帮助。
  • 刚刚更新了页面。我不能给你原始的上下文,但是现在用一个小例子更好地描述我的问题

标签: c# sql linq entity-framework-core


【解决方案1】:

做这样的事情:(根据你的更新列名)

var query = (from c in TestResult
        join tbl2 in TestResultRelated on c.ID equals tbl2.TestResult 
        where c.USER_LOGIN_NAME = 'emilwkj' and tbl2.DATA != ''
        orderby tbl2.DATA
        group tbl2 by tbl2.DATA into g
        select new 
        {
            Id = g.Key.Id,
            Name = g.Key.Name,
            TestResultRelated = g
        })
        .Distinct()   //.Distinct(x=>x.someColumn) 
        .OrderByDescending(x => x.date);
        .Take(10)

【讨论】:

  • 嗯,Distinct(x => ...) 方法从何而来?
【解决方案2】:

据我们了解,您正在使用 efcore 和 DbContext 来处理 TestResult 和 TestResultRelated 表。

这是我们从您的问题中了解到的问题代码。

var db=new DbContext();
var result = (from a in db.TestResult
             join b in db.TestResultRelated on a.ID equals b.TestResult
             where b.PATH == "TestResultRelatedAdditionalData.SoftwareVersion"
             & a.USER_LOGIN_NAME == "emilwkj" & b.DATA!=" "
             group b by b.DATA into item
             orderby item.Max(e=>e.START_DATE_TIME) descending
             select item)
             .Take(10);

【讨论】:

    猜你喜欢
    • 2017-07-07
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 2013-07-29
    • 2021-12-31
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多