通过ANY查找项目

时间:2016-12-19 18:51:16

标签: c# linq

我想指定提示码为'2041'的prompt.message的值。我已经把if检查,但我不知道如何获得该提示项的消息。

班级结构

public class Prompts
{
    public List<Prompt> prompt { get; set; }
}

public class Prompt
{
    public string message { get; set; }
    public int code { get; set; }
} 

到目前为止试过这个:

if(Prompts.prompt.Any(p => p.code == 2041))
{
    string message = Prompts.prompt[0].message;
}

4 个答案:

答案 0 :(得分:6)

在这种情况下,您应该使用FirstOrDefault()Any只返回一个布尔值。

var message = Prompts.prompt.FirstOrDefault(p => p.code == 2041)?.message;

在找不到它时会给你null,或者在C#6中给你第一个消息

如果你还没有使用C#6,那么类似的方式就是

var prompt = Prompts.prompt.FirstOrDefault(p => p.code == 2041);
string message;

if (prompt != null) {
    message = prompt.message;
}

答案 1 :(得分:1)

要获得满足给定条件的第一项,请使用First

string message = Prompts.First(p => p.code == 2041).message;

如果您可能没有任何此类项目,请使用FirstOrDefault以便它不会抛出(如果找不到该项,它将返回null。)

如果您有满足条件的多个项目,请使用Where全部获取。 Any在这里并不是那么有用。

答案 2 :(得分:0)

两个问题。一个是你在Prompt类上没有代码属性。其次是呼叫&#34;任何&#34;只是让您知道存在符合条件的对象。使用&#34;其中&#34;实际上找到那些对象。

public class Prompts
{
    public List<Prompt> prompt { get; set; }
}

public class Prompt
{
    public string message { get; set; }
    public int code { get; set;}
} 

....
var promptsWeCareAbout = Prompts.prompt.Where(p => p.code == 2041);
if(promptsWeCareAbout.Any()) 
{
    string message = promptsWeCareAbout.First().message;
}

答案 3 :(得分:0)

尝试这样的事情

     List<Prompt> promptList = new List<Propmt>();
    promList = db.Prompts.ToList();    
    string Message = prompList.Where( p => p.Code == 2041).FirstOrDefault().Message;
相关问题