2012-03-10 54 views
0

一个人如何使用查询表达式风格的LINQ选择特定对象选择的对象?的LINQ:基于财产

private static ObservableCollection<Branch> _branches = new ObservableCollection<Branch>(); 
public static ObservableCollection<Branch> Branches 
{ 
    get { return _branches; } 
} 

static void Main(string[] args) { 
    _branches.Add(new Branch(0, "zero")); 
    _branches.Add(new Branch(1, "one")); 
    _branches.Add(new Branch(2, "two")); 

    string toSelect="one"; 

    Branch theBranch = from i in Branches 
         let valueBranchName = i.branchName 
         where valueBranchName == toSelect 
         select i; 

    Console.WriteLine(theBranch.branchId); 

    Console.ReadLine(); 
} // end Main 


public class Branch{ 
    public int branchId; 
    public string branchName; 

    public Branch(int branchId, string branchName){ 
     this.branchId=branchId; 
     this.branchName=branchName; 
    } 

    public override string ToString(){ 
     return this.branchName; 
    } 
} 

返回以下错误:

Error 1 Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<ConsoleApplication1.Program.Branch>' to 'ConsoleApplication1.Program.Branch'. An explicit conversion exists (are you missing a cast?) C:\Users\dotancohen\testSaveDatabase\ConsoleApplication1\ConsoleApplication1\Program.cs 35 12 ConsoleApplication1 

然而,明确铸像这样:

Branch theBranch = (Branch) from i in Branches 
         let valueBranchName = i.branchName 
         where valueBranchName == toSelect 
         select i; 

返回此错误:

Unable to cast object of type 'WhereSelectEnumerableIterator`2[<>f__AnonymousType0`2[ConsoleApplication1.Program+Branch,System.String],ConsoleApplication1.Program+Branch]' to type 'Branch'. 

能的LINQ不会返回一个对象,或者我错过了什么obvi OU中?

谢谢。

回答

9

查询返回分支的序列(可能有很多分支满足谓词),如果你想拥有的名称为“一”(或空,如果有没有匹配的要求是)第一个分支,然后使用:

Branch theBranch = this.Branches.FirstOrDefault(b => b.branchName == "one"); 

我也将避免公共领域和使用性能,而不是:

public class Branch 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
+0

谢谢你,现在该错误信息是很清楚,我明白为什么它被抛出! – dotancohen 2012-03-10 19:35:20

1

您需要使用。首先()从查询得到的第一个分支项目。

LINQ查询返回对象的集合。

+0

谢谢玛吉! – dotancohen 2012-03-10 19:45:23