设计:列出存储对象;访问与该对象相关的信息

时间:2013-02-14 16:00:07

标签: c# list

我有两个与我正在尝试做的相关的课程。

第1类:人

第2课:个人资料

人具有地址,姓名,电话号码等属性......

在我的Personal Profiles类中,我有一个List,用于存储已创建的Person的信息。

我的问题:如果我想知道列表中是否存在地址为:999 Candy Lane的人我是否需要为除指定地址以外的所有内容创建一个新的默认人员,然后在我的。存在还是。包含?或者我不应该只为搜索功能创建一个新对象。

6 个答案:

答案 0 :(得分:2)

你为什么不使用Linq:

theList.Where(x => x.address == "999 Candy Lane").First();

答案 1 :(得分:1)

如果您使用.net 3.5+,则可以使用linq查询: 即

var result = (from p in Profiles where p.Address=="bla bla" select p).FirstOrDefault();

如果找不到匹配的人,结果将为null。

答案 2 :(得分:1)

鉴于缺少值的概率很高,最好使用FirstOrDefault。 当然,First和FirstOrDefault采用谓词,因此不需要使用Where

var result = List.FirstOrDefault(x => x.Address == "999 Candy Lane"); 
if(result != null)
{
  ......
}

答案 3 :(得分:0)

这是Any的确切用例。

它的用法如下:

if(People.Any(p => p.Address.Equals("999 Candy Lane")))
{
    //.....
}

答案 4 :(得分:0)

不,您不必创建新的搜索对象:

Person person = profiles.PersonsList.Where(p => p.Address == "Address here")
                                    .Select(p => p);

答案 5 :(得分:0)

您可能想要使用linq和lambda:

var candyLane = Persons.Where(x => x.Address == "999 Candy Lane").ToList();

这样做是为了提供一个lambda谓词用作选择器。可以把它想象成这样指定的匿名函数:

public bool CandyLaneChecker(x){
    return x.Address == "999 Candy Lane";
}

其中大括号和return关键字被=>替换,public bool CandyLaneChecker被省略,因为这是一个匿名函数。这将留下(x) => x.Address == "999 Candy Lane",我们可以将括号留在原始谓词中,但不需要它们。

或者,可以使用linq表达式,例如:

var candyLane = (from p in persons
                 where p.Profile.Address == "999 Candy Lane"
                 select p).ToList();

这看起来更像是数据库查询,对某些人来说更容易理解。

关于linq表达式的重要部分是你甚至可以在XML中使用相同的表达式。