簡體   English   中英

如何在 LINQ 和 C# 中使用 if 條件

[英]How to use an if condition in LINQ with C#

在此處輸入圖像描述 我想顯示一個變量的值,其值取決於另一個變量。 假設我在表中有三行:

starttime   endtime  comment
02:55       15:56    abc
03:54       23:46    def
09:33       12:69    oiuy

我想在 Linq 中使用Where條件,這樣評論應該基於開始時間顯示,這樣如果我02:55 ,那么評論應該顯示abc

我使用這個 linq 查詢:

Comment = fr.Where(x => x.Starttime).Comment

但這是不正確的。 誰能建議我需要什么改進?

Where子句必須返回一個bool ,所以你所缺少的只是實際的比較:

fr.Where(x => x.Starttime == "02:55")

但是現在我們還需要決定 select 是什么。 可能有很多、一個或沒有退回的物品。 如果我們只想要第一個匹配,我們可以使用FirstOrDefault ,它將返回第一條記錄,或者null如果沒有返回。 我們還可以通過將 FirstOrDefault 的結果與FirstOrDefault進行null (使用??運算符),將 select 設置為默認值,例如"[no match found]"如果沒有返回記錄:

var comment = fr
    .Where(item => item.Starttime == "02:55")
    .FirstOrDefault()
    ?.Comment ?? "[no match]";

如果我們想要 select 多條評論,那么我們可以使用Select方法指定我們想要的屬性 select 和ToList()將它們都返回到一個List<string>中:

var allComments = fr
    .Where(item => item.Starttime == "02:55")
    .Select(item => item.Comment)
    .ToList();

更新

現在您已經發布了代碼的屏幕截圖(此處不建議這樣做 - 最好將相關代碼粘貼到問題中的代碼部分),看來您正在設置基於匿名類型的實例的屬性IGrouping中項目的屬性。

由於您有StartTime = fr.Min(x => x.StartTime) ,並且顯然CommentStartTime有某種關系,您可能想做這樣的事情:

// Get the Comment from the item with the smallest (Min) StartTime
Comment = fr.OrderBy(x => x.StartTime).FirstOrDefault()?.Comment ?? "[no comment]",

嘗試

var comments = fr.Where(x => x.Starttime == val).Select(x=> x.Comment);

如果您只想要第一場比賽,請嘗試

 var comment = fr.Where(x => x.Starttime == val).FirstOrDefault()?.Comment;

或更簡潔地說

var comment = fr.FirstOrDefault(x => x.Starttime == val)?.Comment;

暫無
暫無

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

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