Linq查询自定义类

时间:2014-07-10 15:07:05

标签: c# linq class

有一个名为Company的自定义类,我希望根据我传递的单个Company.AccountID返回此类的单个实例。我有大部分查询,但我搞砸了某个地方。有人可以帮助我吗?

Company cmp = Companies.Select(comp => comp.AccountID == accountID).Select(comp => new Company());

2 个答案:

答案 0 :(得分:4)

使用Enumerable.FirstOrDefault之类的:

Company obj = Companies.FirstOrDefault(comp=> comp.AccountID == accountID);

在当前查询中,您正在选择布尔运算的结果。你需要的是Where喜欢:

Companies.Where(comp => comp.AccountID == accountID)

这会为您提供符合条件的IEnumerable<Company>个对象,之后您可以在查询结尾添加FirstOrDefault /First,如:

Company c = Companies.Where(comp => comp.AccountID == accountID).FirstOrDefault();

如果找不到匹配的记录,请记住FirstOrDefault将返回null。另一方面,First将抛出异常。

要从集合中选择一条记录,您的选项为First / FirstOrDefaultSingle / SingleOrDefaultLast / LastOrDefault(Last / LastOrDefault仅通过LINQ to objects支持,实体框架不支持)

答案 1 :(得分:3)

您有多种选择,您必须选择最适合您的选择。

  1. 如果您希望根据LINQ查询进行多次匹配,但是如果没有至少一个匹配则抛出异常,请使用First

    var company = Companies.First(c => c.AccountID == accountID);
    
  2. 如果您希望根据LINQ查询进行多次匹配,请使用FirstOrDefault,如果没有匹配则需要null

    var company = Companies.FirstOrDefault(c => c.AccountID == accountID);
    
  3. 如果您的查询应该只返回一条记录,请使用Single。如果有任何其他结果,将抛出异常。

    var company = Companies.Single(c => c.AccountID == accountID);
    
  4. 如果您的查询应返回0或1条记录,请使用SingleOrDefault。如果未找到记录,则会返回null

    var company = Companies.SingleOrDefault(c => c.AccountID == accountID);
    
  5. 请务必做出正确的选择。根据您选择的方法,现在将向未来的其他开发人员表达您的意图,以便错误不会因为查询过于通用而慢慢自我介绍。