2010-07-11 78 views
0

我有查询可能没有序列上的任何元素,我想添加一个元素序列如果是空的。如果是空的,如何添加默认元素?使用DefaultIfEmpty()

var results = _context.Documents.Select(document => document.MimeType).Distinct().ToList().DefaultIfEmpty("There is nothing to be used as MimeType"); 

但仍然是空的,但是使用了DefaultIfEmpty方法。

+0

你是如何确定的顺序确实是空的?有可能是周围的代码产生了意想不到的副作用吗? – 2010-07-12 00:08:43

+0

使用LinqPad: var l = new List >(){new KeyValuePair (“key”,“value”)}; ()();()();()() l = new List >(){}; ()();()();()() 第一个使用“键”给出一个元素序列,第二个使用“(空)”给出一个元素序列。 你没有结果变量中的元素?或者是有一个结果与空字符串? – 2010-07-12 01:10:08

+0

@JT:结果有一个或几个元素或什么也没有。当序列没有任何元素时,我想添加一个元素(如“Nothing there”)来排序;但是我可以检查它是否序列计数== 0然后添加一个元素,但我想知道可以使用LINQ内置扩展方法(如DefaultIfEmpty或不)。 – Sadegh 2010-07-12 07:32:56

回答

1

是的,您可以使用DefaultIfEmpty()来达到此目的。 (但是,请注意,您的查询ToList()是多余的。)

例如:

string[] s1 = new string[] { }; 
string[] s2 = new string[] { "abc" }; 

// Outputs "DEFAULT" because the sequence s1 is empty. 
foreach (var s in s1.DefaultIfEmpty("DEFAULT")) 
    Console.WriteLine(s); 

// Outputs "abc" from the sequence s2 and nothing else. 
foreach (var s in s2.DefaultIfEmpty("DEFAULT")) 
    Console.WriteLine(s); 
相关问题