我的查询的返回类型是IEnumerable<XElement>。如何将结果数据转换为XElement类型?可能吗?可以帮助我理解这一点。

var resQ = from e in docElmnt.Descendants(xmlns + Constants.T_ROOT)
                             .Where(x => x.Attribute(Constants.T_ID).Value == "testid")
           select e;

我必须将resQ作为参数传递给以下函数。为了做到这一点,我必须将resQ转换为XElement类型。
Database.usp_InsertTestNQuestions(tid, qId, qstn, ans, resQ );

最佳答案

只要您的查询仅返回单个结果,就可以对结果调用Single()或First()(而且,不需要额外的查询语法):

// Use if there should be only one value.
// Will throw an Exception if there are no results or more than one.
var resQ = docElmnt.Descendents(xmlns + Constants.T_ROOT)
                   .Single(x => x.Attribute(Constants.T_ID).Value == "testid");

// Use if there could be more than one result and you want the first.
// Will throw an Exception if there are no results.
var resQ = docElmnt.Descendents(xmlns + Contants.T_ROOT)
                   .First(x => x.Attribute(Constants.T_ID).Value == "testid");

如果要处理查询没有返回任何结果而没有引发异常的情况,则可以使用SingleOrDefault(如果得到多个结果,仍然会引发Exception)或FirstOrDefault

10-06 00:36