如何执行LINQ查询并选择?

3

我正在运行以下内容:

var abc = new adminModel();
string text = abc.AnswerType.SingleOrDefault(s => s.Value == "2");
string text0 = abc.AnswerType.Single(s => s.Value == "2").Text;
var text1 = (from a in abc.AnswerType 
  here a.Value == "2"
  select a.Text).SingleOrDefault();

AnswerType 应该长这样:
public class adminModel
{

    public IEnumerable<SelectListItem> AnswerType
    {
        get
        {
            return new[]
                {
                    new SelectListItem { Value = "1", Text = "1 answer" },
                    new SelectListItem { Value = "2", Text = "2 answers" },
                    new SelectListItem { Value = "3", Text = "3 answers" },
                    new SelectListItem { Value = "4", Text = "4 answers" },
                    new SelectListItem { Value = "5", Text = "5 answers" },
                    new SelectListItem { Value = "6", Text = "6 answers" },
                    new SelectListItem { Value = "7", Text = "7 answers" },
                };
        }
    }

}

但是我收到了一个错误消息,说“无法将SelectListItem转换为字符串”。有没有办法只提取SelectListItem中的文本?

2个回答

2
在你的代码中,AnswerType.SingleOrDefault(s => s.Value == "2")将会返回一个SelectedListItem实例,而不是一个string
如果你需要获取文本,查询应该是:
string text = AnswerType.Single(s => s.Value == "2").Text;

或者
string text = AnswerType
    .Where(s => s.Value == "2")
    .Select(arg => arg.Text)
    .SingleOrDefault();

@David H - 我复制粘贴了你的代码,并检查了AnswerTypetext被赋值为“2个答案”的字符串。 - Alex Aza
可能是我使用AnswerType的方式有问题。我会在我的问题中添加一些内容来展示这一点。 - Jennifer82
@David H - 我看到了你的更新。我再次复制/粘贴了你的代码。注释掉了TopicSubTopic,因为它们没有被定义。运行代码后,abc.AnswerType.Single(s => s.Value == "2").Text返回了“2个答案”。 - Alex Aza
我在问题中添加了更多细节。也许是我设置AnswerType的方式有问题? - Jennifer82
@David H - 如果您创建一个新项目并复制/粘贴您展示的代码,您会发现它可以工作,除了原始行string text = abc.AnswerType.SingleOrDefault(s => s.Value == "2"); - Alex Aza
显示剩余2条评论

1

试试这个:

string text = AnswerType
        .Where(s => s.Value == "2")
        .Select(s=> s.Text)
        .SingleOrDefault();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接