简体   繁体   English

如何使用lambda表达式过滤多列的实体框架结果

[英]How to filter entity framework result with multiple columns using a lambda expression

I have the following table: 我有下表:

在此输入图像描述

And the following data: 以下数据:

在此输入图像描述

How can i filter the result, so that i only get the latest row from each omraade_id (sorted descending by timestamp )? 如何过滤结果,以便我只从每个omraade_id获取最新的行(按timestamp降序排序)?

Which in this case would be the rows with id: 1010 and 1005 在这种情况下,其中id为10101005的行

-- -

From @lazyberezovsky's answer, i have created the following expression: 从@ lazyberezovsky的回答中,我创建了以下表达式:

dbConnection = new ElecEntities();

            var query = from data in dbConnection.Valgdata
            orderby data.timestamp descending
            group data by data.omraade_id into g
            select g.FirstOrDefault();

            return query.ToList();

It returns two rows with the ID 3 and 4, which are the first two rows in the database, and also the ones with the lowest timestamp. 它返回ID为3和4的两行,它们是数据库中的前两行,也是时间戳最低的行。 Any idea why? 知道为什么吗?

var query = dbConnection.Valgdata
                        .GroupBy(x => x.omraade_id)
                        .Select(g => g
                             .OrderByDescending(x => x.timestamp)
                             .FirstOrDefault());

I have no experience with EF, so I'm unsure if only SQL-esque linq works here. 我没有EF的经验,所以我不确定是否只有SQL-esque linq在这里工作。 A plain C#-ish: 简单的C#-ish:

var query = dbConnection.Valgdata.GroupBy(u => u.omraade_id)
      .Select(x => x.FirstOrDefault(y => x.Max(p => p.timestamp) == y.timestamp));
var query = from v in dbConnection.Valgdata
            orderby v.timestamp descending
            group v by v.omraade_id into g
            select g.First();

This will return only record with max timestamp for each omraade_id. 这将仅返回每个omraade_id的最大时间戳记录。

UPDATE query above works fine to me (at least for MS SQL Linq provider). 上面的UPDATE查询对我来说很好(至少对于MS SQL Linq提供程序)。 Also you don't need to do FirstOrDefault - if omraade_id is grouped, then it definitely has at least one row. 你也不需要做FirstOrDefault - 如果omraade_id被分组,那么它肯定至少有一行。

var query = from v in dbConnection.Valgdata
            group v by v.omraade_id into g
            select g.OrderByDesc(x => x.timestamp).First();

You have put filter on every item. 你已经对每个项目进行了过滤。 It should be applied on complete query result, not on every item. 它应该应用于完整的查询结果,而不是每个项目。

Following is updated query. 以下是更新的查询。

 var query = (from data in dbConnection.Valgdata
        orderby data.timestamp descending
        group data by data.omraade_id into g
        select g).FirstOrDefault();

This is my solution so far: 到目前为止这是我的解决方案:

var data = dbConnection.Valgdata.Where(x => x.godkendt == false).ToList();
var dataGrouped = data.GroupBy(x => x.omraade_id).ToList();

List<Valgdata> list = new List<Valgdata>();

 foreach (var grpdata in dataGrouped)
            {
                var dataGroup = grpdata.OrderByDescending(x => x.timestamp).ToList();
                list.Add(dataGroup.FirstOrDefault());
            }
return list;

I dont know if it is the most effective, but it works. 我不知道它是否最有效,但它确实有效。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 使用实体框架的C#中的Lambda表达式,带有多个左外部联接以及行内附加过滤器 - Lambda expression in C# using Entity Framework with multiple left outer joins with in line additional filter 如何&#39;不&#39;实体框架的lambda表达式 - how to 'not' a lambda expression for entity framework 实体框架Lambda表达式获取特定列 - Entity Framework Lambda Expression To Get Specific Columns 如何在Asp MVC实体框架中使用使用lambda表达式的连接? - How to use join using lambda expression in Asp MVC Entity Framework? 如何使用带有Lambda表达式的实体框架在mysql查询下编写代码? - How to write below mysql query using Entity Framework with Lambda expression? 实体框架 - 使用lambda表达式编写查询 - Entity Framework - writing query using lambda expression 如何在实体框架中使用 lambda 表达式进行此查询? - How to make this query with lambda expression in Entity Framework? 实体框架核心 Lambda 表达式连接 4 个表并使用 where 进行过滤 - Entity Framework Core Lambda Expression join 4 tables and filter with where 如何使用 Expression.Lambda 选择多个列? - How to select multiple columns using Expression.Lambda? 使用实体框架按约束表中的列进行过滤 - Using Entity Framework to filter by columns in constrained tables
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM