LINQ select 子句中的 C# if 语句

本文关键字:if 语句 select 子句 LINQ | 更新日期: 2023-09-27 18:34:34

我有一个 Linq 查询,我需要根据列表中是否存在记录在 select 子句中有一个值。这是我的查询:

var records = (from il in itemList
        join ci in catalogueItemList on il.CatalogueItemID equals ci.CatalogueItemID
        join pd in publicationDataList on il.CatalogueItemID equals pd.CatalogueItemID
        select new { il.ItemID, pd.ISBN, ci.Title, ci.CatalogueItemID, il.LocationID, il.Missing,  }).ToList();

我有一个名为itemCheckoutDictionary的字典,我想要的伪代码是:

if (itemCheckDictionary.ContainsKey(i.itemID)) then "Checked Out" else "In"

我在我的选择子句中需要它,我不确定如何完成此操作。

LINQ select 子句中的 C# if 语句

你试过三元运算符吗?

string s = itemCheckDictionary.ContainsKey(i.itemID) ? "Checked Out" : "In";

我通常更喜欢使用一个小的辅助函数来做到这一点:

var getStatus = new Func<int, string>(itemID => { 
    return itemCheckDictionary.ContainsKey(itemID) ? "Checked Out" : "In"; 
});
var records = (from il in itemList
    join ci in catalogueItemList on il.CatalogueItemID equals ci.CatalogueItemID
    join pd in publicationDataList on il.CatalogueItemID equals pd.CatalogueItemID
    select new { 
        // other properties
        Status =  getStatus(i.ItemID) }).ToList();

你不需要 if,你可以使用:

itemCheckDictionary.ContainsKey(i.itemID) ?  "Checked Out" : "In"