C# 是否有更好的方法编写以下Linq查询

C# 是否有更好的方法编写以下Linq查询,c#,.net,xml,linq,C#,.net,Xml,Linq,假设我们有一个XML文档列表,“数据”列表。在此列表中可能会出现一个合作社主。类似于以下结构(只是一个示例) 但我想知道,是否有一个更整洁的方法来做到这一点。很好, 但是我不喜欢o.Element(“Firstname”)值多次出现的方式。也有出现空异常的风险 o、 元素(“firstname”)。值。为了处理这些问题,必须进行更多的元素提取,如下所示: var fname = data.Descendants("coOwner").select(co => co.Element("lir

假设我们有一个XML文档列表,“数据”列表。在此列表中可能会出现一个合作社主。类似于以下结构(只是一个示例)

但我想知道,是否有一个更整洁的方法来做到这一点。很好, 但是我不喜欢o.Element(“Firstname”)值多次出现的方式。也有出现空异常的风险 o、 元素(“firstname”)。值。为了处理这些问题,必须进行更多的元素提取,如下所示:

var fname = data.Descendants("coOwner").select(co => co.Element("lirstname"))
var lname = data.Descendants("coOwner").select(co => co.Element("lastname"))

    if(fname != null && lname != null){
        //then the same code as mentioned above. 
    }

有没有更整洁的方法?提前感谢

将值保存到单独的范围变量和过滤器中,无需重复。在尝试检索元素或属性的值时,应该始终使用强制转换

var query =
    from co in data.Descendants("coOwner")
    let fname = (string)co.Element("firstname")
    let lname = (string)co.Element("lastname")
    where !String.IsNullOrWhiteSpace(fname)
    where !String.IsNullOrWhiteSpace(lname)
    select new CoOwner
    {
        Firstname = fname,
        Lastname = lname,
    };

将值保存到单独的范围变量和过滤器中,无需重复。在尝试检索元素或属性的值时,应该始终使用强制转换

var query =
    from co in data.Descendants("coOwner")
    let fname = (string)co.Element("firstname")
    let lname = (string)co.Element("lastname")
    where !String.IsNullOrWhiteSpace(fname)
    where !String.IsNullOrWhiteSpace(lname)
    select new CoOwner
    {
        Firstname = fname,
        Lastname = lname,
    };

哇,那是非常整洁和性感。非常感谢。需要深入研究linq查询。我刚开始看它,我必须说,不要错过for-loops。哇,那是非常整洁和性感的。非常感谢。需要深入研究linq查询。刚开始看,我必须说,不要错过循环。
var query =
    from co in data.Descendants("coOwner")
    let fname = (string)co.Element("firstname")
    let lname = (string)co.Element("lastname")
    where !String.IsNullOrWhiteSpace(fname)
    where !String.IsNullOrWhiteSpace(lname)
    select new CoOwner
    {
        Firstname = fname,
        Lastname = lname,
    };