我有以下代码。在这里,我想在lstServiceLevels List中找到servicelevelid,它是ServiceLevelDetails的一个对象数组,其中ServiceLevelName是" Basic"
有人可以帮我搞定吗?
public class ServiceLevelDetails
{
public int servicelevelid;
public string ServiceLevelName;
}
class Program
{
static void Main(string[] args)
{
IList<ServiceLevelDetails> lstServiceLevels = new List<ServiceLevelDetails>();
ServiceLevelDetails one = new ServiceLevelDetails();
one.servicelevelid=1;
one.ServiceLevelName="Basic";
ServiceLevelDetails Two = new ServiceLevelDetails();
Two.servicelevelid = 2;
Two.ServiceLevelName = "Enhanced";
lstServiceLevels.Add(one);
lstServiceLevels.Add(Two);
var test = from LevelName in lstServiceLevels
let LevelName= obj as ServiceLevelDetails
where LevelName.ServiceLevelName == "Basic"
select LevelName;
//getting error in the above code .
}
}
答案 0 :(得分:1)
您的范围内没有任何内容称为obj
,因此不清楚为什么这会出现在您的查询中。
在LINQ查询语法中,听起来你想要这个:
from serviceLevel in lstServiceLevels
where serviceLevel.ServiceLevelName == "Basic"
select serviceLevel;
或者在LINQ方法语法中:
lstServiceLevels.Where(x => x.ServiceLevelName == "Basic");
如果您在评论中建议,您需要特定名称的ID:
var id = lstServiceLevels
.Where(x => x.ServiceLevelName == "Basic")
.Select(x => x.servicelevelid)
.Single();
答案 1 :(得分:0)
这里有一个替代方案,您不会遇到异常 什么时候找不到元素。
查找此元素的第一个匹配项:
// FirstOrDefault will return null if nothing was found
// but it also will return only the first element!
var id_test = lstServiceLevels.FirstOrDefault(x => x.ServiceLevelName == "Basic");
// then you can check for it and take the ID if it was found
// or else assign some other value
int id = id_test != null ? id_test.servicelevelid : 0;
使用try / catch或null测试当然是一种品味问题:)