我有 ListItemCollection
。每个元素都是 ListItem
类型。我只想返回具有给定值的项目的文本。
目前,我正在使用这个功能:
public string GetTextFromPaymentWayCollection(string value)
{
ListItemCollection listPaymentWays = DB.GetList();
foreach (ListItem item in listPaymentWays)
{
if (item.Value == value)
{
return item.Text;
}
}
return null;
}
有没有办法用 LINQ 来代替这个函数来做到这一点?
最佳答案
你的 listPaymentWays
属于 ListItemCollection
没有实现 IEnumerable<T>
. linq 方法是 IEnumerable<T>
上的扩展方法.
例如 FirstOrDefault
的签名:
public static TSource FirstOrDefault<TSource>( this IEnumerable<TSource> source )
首先要做的是Cast
(这将返回一个 IEnumerble<ListItem>
)然后使用 FirstOrDefault
:
var result = listPaymentWays.Cast<ListItem>()
.FirstOrDefault(x => x.Value == value)?.Text;
?.
是 C# 6.0 Null Proparation 功能。
我还建议 DB.GetList()
将公开一个将获取值的方法,以便过滤将在数据库中而不是在内存中进行。带上所有的数据很浪费,创建ListItems
然后只取一个项目。
关于c# - ListItemCollection - 使用 LINQ 从值中获取文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40425966/