将DefaultIfEmpty与对象一起使用?

时间:2010-11-01 20:07:48

标签: c# .net linq

我在MSDN上看到一个示例,如果没有返回任何内容,它将允许您指定默认值。见下文:

List<int> months = new List<int> { };
int firstMonth2 = months.DefaultIfEmpty(1).First();

是否可以将此功能与对象一起使用?例如:

class object
{
  int id;
  string name;
}

代码:

List<myObjec> objs = new List<myObjec> {};
string defaultName = objs.DefaultIfEmpty(/*something to define object in here*/).name;

更新

我以为我可以这样做:

List<myObjec> objs = new List<myObjec> {};
string defaultName = objs.DefaultIfEmpty(new myObjec(-1,"test")).name;

但未能。应该注意的是,我实际上是尝试使用LINQ-To-SQL在我的DBML中定义的对象上使用此方法。不确定这是否会对这种情况产生影响。

4 个答案:

答案 0 :(得分:6)

您需要将实例化的类作为DefaultIfEmpty的参数传递。

class Program
{
    static void Main(string[] args)
    {
        var lTest = new List<Test>();
        var s = lTest.DefaultIfEmpty(new Test() { i = 1, name = "testing" }).First().name;
        Console.WriteLine(s);
        Console.ReadLine();

    }
}

public class Test
{
    public int i { get; set; }
    public string name { get; set; }
}

要添加它并使其更优雅(IMO)添加默认构造函数:

class Program
{
    static void Main(string[] args)
    {
        var lTest = new List<Test>();
        var s = lTest.DefaultIfEmpty(new Test()).First().name;
        Console.WriteLine(s);
        Console.ReadLine();

    }
}

public class Test
{
    public int i { get; set; }
    public string name { get; set; }

    public Test() { i = 2; name = "testing2"; }
}

答案 1 :(得分:2)

根据此扩展方法的MSDN页面,您可以执行所需操作:

http://msdn.microsoft.com/en-us/library/bb355419.aspx

检查此页面上的示例,以获取有关如何将其与对象一起使用的示例。

答案 2 :(得分:1)

我必须承认我不太清楚我理解你的问题,但如果返回的对象可能为null,我会尝试建议使用双问号。像这样:

myList.FirstOrDefault() ?? new myObject();

答案 3 :(得分:0)

您可以像这样创建默认对象:

Object o_Obj_Default = new Object();
o_Obj_Default.id = 3;
o_Obj_Default.name = "C";

并将其添加到您的默认值:

string defaultName = objs.DefaultIfEmpty(o_Obj_Default).First().name;

如果您的列表“objs”为空,则结果为“C”

相关问题