Linq找到里面的Array对象

时间:2016-06-09 12:51:41

标签: c# .net linq

我有以下代码。在这里,我想在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 .  
    }
}

2 个答案:

答案 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测试当然是一种品味问题:)