簡體   English   中英

如何使用lambda表達式過濾多列的實體框架結果

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

我有下表:

在此輸入圖像描述

以下數據:

在此輸入圖像描述

如何過濾結果,以便我只從每個omraade_id獲取最新的行(按timestamp降序排序)?

在這種情況下,其中id為10101005的行

-

從@ 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();

它返回ID為3和4的兩行,它們是數據庫中的前兩行,也是時間戳最低的行。 知道為什么嗎?

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

我沒有EF的經驗,所以我不確定是否只有SQL-esque linq在這里工作。 簡單的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();

這將僅返回每個omraade_id的最大時間戳記錄。

上面的UPDATE查詢對我來說很好(至少對於MS SQL Linq提供程序)。 你也不需要做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();

你已經對每個項目進行了過濾。 它應該應用於完整的查詢結果,而不是每個項目。

以下是更新的查詢。

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

到目前為止這是我的解決方案:

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;

我不知道它是否最有效,但它確實有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM