简单的Linq查询可从单个项目中进行选择

时间:2013-08-07 07:50:57

标签: c# linq union

我有一个类如下:

public class ParentData
{
    public List<ChildData> ChildDataList { get; set; }
    public ChildData AnotherChildData { get; set; }
}

我正在寻找一个简单的Linq查询来从这两个成员中进行选择。这是我实际做的事情:

var query = (from data in parentData.ChildDataList select data)
            .Union
            (from data in new List<ChildData> { parentData.AnotherChildData } select data);

有更好的方法吗?谢谢。

2 个答案:

答案 0 :(得分:4)

您可以将代码缩减为:

var query = parentData.ChildDataList
                      .Concat(new [] { parentData.AnotherChildData });

答案 1 :(得分:0)

这是我使用的解决方案(根据Is there a neater linq way to 'Union' a single item?):

public static class LinqHelper
{
    // returns an union of an enumerable and a single item
    public static IEnumerable<T> SingleUnion<T>(this IEnumerable<T> source, T item)
    {
        return source.Union(Enumerable.Repeat(item, 1));
    }

    // returns an union of two single items
    public static IEnumerable<T> SingleUnion<T>(this T source, T item)
    {
        return Enumerable.Repeat(source, 1).SingleUnion(item);
    }
}

然后我可以做:

var query = parentData.ChildDataList
            .SingleUnion(parentData.AnotherChildData)