我有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;
}
Run Code Online (Sandbox Code Playgroud)
有没有办法用LINQ做这个,而不是使用这个功能?
Gil*_*een 12
你的意思listPaymentWays是ListItemCollection没有实现IEnumerable<T>.linq方法是扩展方法IEnumerable<T>.
例如FirstOrDefault:签名:
Run Code Online (Sandbox Code Playgroud)public static TSource FirstOrDefault<TSource>( this IEnumerable<TSource> source )
你应该做的是先Cast(将返回一个IEnumerble<ListItem>),然后使用FirstOrDefault:
var result = listPaymentWays.Cast<ListItem>()
.FirstOrDefault(x => x.Value == value)?.Text;
Run Code Online (Sandbox Code Playgroud)
这?.是C#6.0 Null Proparation功能.
此外,我建议DB.GetList()将公开一个获取值的方法,以便过滤将在数据库中而不是在内存中进行.带来所有数据,创建ListItems它然后只需要一个项目是一种浪费.
您需要先投射它才能使用Where。剩下的就是普通的Linq。
string s = listPaymentWays.Cast<ListItem>()
.ToDictionary(i => i.Value, i => i.Text)
.Where(x => x.Value == value)
.FirstOrDefault().Value;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3778 次 |
| 最近记录: |