2016-06-09 80 views
-1

内部数组我有下面的代码。在这里,我想查找lstServiceLevels列表中的servicelevelid,它是ServiceLevelName为“Basic”的ServiceLevelDetails对象的数组。LINQ到找对象

任何人都可以请帮助我得到它吗?

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 . 
    } 
} 
+1

所以什么错在LINQ这就是你的码?它以什么方式不起作用? – BugFinder

+1

你在上面的代码中遇到了什么错误? –

+0

我需要使用下面的代码才能得到正确的结果。 VAR测试=(从lstServiceLevels LevelName让EMP = LevelName为其中emp.ServiceLevelName == “增强的” 选择EMP ServiceLevelDetails).ToList(); int servicelevelid = test [0] .servicelevelid; – Kenta

回答

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(); 
+0

下面的代码是否正确? VAR测试=(从lstServiceLevels LevelName让EMP = LevelName为其中emp.ServiceLevelName == “增强的” 选择EMP ServiceLevelDetails).ToList(); INT servicelevelid =测试[0] .servicelevelid; 。 – Kenta

+0

还是低于一个 INT测试= lstServiceLevels.Where(X => x.ServiceLevelName == “增强”)ToList()[0] .servicelevelid; – Kenta

+0

不,你究竟在做什么? 'emp'从哪里来?第二个更接近。我提供的代码将会工作(我已经添加了一个额外的例子)。 –

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语句或空测试:)