选择lambda用法

时间:2015-07-13 09:47:16

标签: c# lambda

抱歉也许是noob问题)但我只是想学习新的东西。 我有一个数组,其中包含许多字段的对象 - 如何 如果例如此对象的第一个字段对于某个字符串是否相等,请选中(此字段也是一个字符串,因此不需要类型操作)

5 个答案:

答案 0 :(得分:2)

考虑这种情况:

// Some data object
public class Data {
    public string Name { get; set; }
    public int Value { get; set; }

    public Data(string name, int value)
    {
        this.Name = name;
        this.Value = value;
    }
}

// your array
Data[] array = new Data[]
{
    new Data("John Smith", 123),
    new Data("Jane Smith", 456),
    new Data("Jess Smith", 789),
    new Data("Josh Smith", 012)
}

array.Any(o => o.Name.Contains("Smith"));
// Returns true if any object's Name property contains "Smith"; otherwise, false.

array.Where(o => o.Name.StartsWith("J"));
// Returns an IEnumerable<Data> with all items in the original collection where Name starts with "J"

array.First(o => o.Name.EndsWith("Smith"));
// Returns the first Data item where the name ends with "Smith"

array.SingleOrDefault(o => o.Name == "John Smith");
// Returns the single element where the name is "John Smith".
// If the number of elements where the name is "John Smith" 
// is greater than 1, this will throw an exception.
// If no elements are found, this` would return null.
// (SingleOrDefault is intended for selecting unique elements).

array.Select(o => new { FullName = o.Name, Age = o.Value });
// Projects your Data[] into an IEnumerable<{FullName, Value}> 
// where {FullName, Value} is an anonymous type, Name projects to FullName and Value projects to Age.

答案 1 :(得分:1)

如果您只想在字段/ Property中找到具有特定值的数组中的第一个元素,则可以使用LINQ FirstOrDefault:

var element = array.FirstOrDefault(e => e.MyField == "value");

如果没有找到这样的值,这将返回满足条件的第一个元素或null(或您的类型的其他默认值)。

答案 2 :(得分:1)

如果我理解你的任务,我不是100%,但无论如何我都会尽力回答: 如果您想获得具有所需字段的第一个对象,可以使用FirstOrDefault:

var element = myArray.FirstOrDefault(o => o.FirstField == "someString");

如果未找到该元素,则返回null。

如果您只想检查数组中的某个对象是否与您的字符串匹配,可以使用任何

进行检查
bool found = myArray.Any(o => o.FirstField == "someString");

希望这有帮助

答案 3 :(得分:0)

Select()用作投影(即数据转换),而不是过滤器。如果要过滤一组对象,则应该查看.Where(),Single(),First()等。如果要验证属性是否适用于集合中的Any或All元素,您也可以使用它们。

答案 4 :(得分:0)

您可以使用Where子句过滤列表

var list = someList.Where(x => x.Name == "someName").FirstOrDefault();
var list = someList.Where(x => x.Name == "someName").ToList();

使用FirstOrDefault仅选择一个对象,并使用ToList选择符合您定义的条件的多个对象。

并确保在比较strings时比较所有UppperCaseLowerCase个字母。

var list = someList.Where(x => x.Name.ToUpper().Equals("SOMENAME")).FirstOrDefault();