Linq to return 如果集合包含不同的值则为 true 或 false
Linq to return true or false if a set contains distinct values
如果我 returning 的集合只包含一个不同的值,我想 return 该值(字符串)。不然我想return"Multiple".
我已将其设置为三元运算符,想知道是否可以使用 Linq 来 SQL 确定该集合是否包含一个不同的值或多个不同的值。
类似于以下内容:
Name = h.NameListings.Select(a=>a.NameId).CheckForDistinct() ? h.NameListings.Select(a=>a.NameId).First() : "Multiple"
我意识到 CheckForDistinct() 不是 Linq 方法;只是用它来解释我正在寻找的行为。
var Name=h.NameListings.Select(a=>a.NameId).Distinct().Count()==1 ?
h.NameListings.Select(a=>a.NameId).First():
"Multiple";
这是另一个数据库解决方案之旅,如果有多个异常则捕获异常(可能仅适用于英文版本——我不知道是否可以翻译异常消息)。
string result="";
try {
result=h.NameListings.Select(a=>a.NameId).Distinct().Single();
}
catch(InvalidOperationException ex) {
if (ex.Message.Contains("more than one"))
result="Multiple";
else
throw;
}
我只想投入我的 2 美分,并展示一次访问数据库的解决方案示例(和 "one" 行,哈哈):
var Name = h.NameListings
.Select(a=>a.NameId)
.Distinct()
.ToArray()
.Select( (name,index) => index == 0 ? name : "Multiple" )
.LastOrDefault();
我仍在使用三元运算符,但由于您正在寻找 Linq to SQL 解决方案,因此无法使用带有索引的 Select 扩展方法。我假设不同的数据库提供者有不同的机制来获取查询的行号。这就是为什么我们需要添加 ToArray()
才能实现查询并使用 (in-memory) Linq to Objects。
除此之外,为了解释我的回答,除了第一个条目之外的所有条目都得到 "Multiple"
。如果我们真的有多个(不同的)NameId
,我们可以确定最后一个条目将包含 "Multiple"
,否则它是 null
或 NameId
。
最后您可能会争辩说我的解决方案的可读性不如罗伯茨,我可能会同意这一点!
如果我 returning 的集合只包含一个不同的值,我想 return 该值(字符串)。不然我想return"Multiple".
我已将其设置为三元运算符,想知道是否可以使用 Linq 来 SQL 确定该集合是否包含一个不同的值或多个不同的值。
类似于以下内容:
Name = h.NameListings.Select(a=>a.NameId).CheckForDistinct() ? h.NameListings.Select(a=>a.NameId).First() : "Multiple"
我意识到 CheckForDistinct() 不是 Linq 方法;只是用它来解释我正在寻找的行为。
var Name=h.NameListings.Select(a=>a.NameId).Distinct().Count()==1 ?
h.NameListings.Select(a=>a.NameId).First():
"Multiple";
这是另一个数据库解决方案之旅,如果有多个异常则捕获异常(可能仅适用于英文版本——我不知道是否可以翻译异常消息)。
string result="";
try {
result=h.NameListings.Select(a=>a.NameId).Distinct().Single();
}
catch(InvalidOperationException ex) {
if (ex.Message.Contains("more than one"))
result="Multiple";
else
throw;
}
我只想投入我的 2 美分,并展示一次访问数据库的解决方案示例(和 "one" 行,哈哈):
var Name = h.NameListings
.Select(a=>a.NameId)
.Distinct()
.ToArray()
.Select( (name,index) => index == 0 ? name : "Multiple" )
.LastOrDefault();
我仍在使用三元运算符,但由于您正在寻找 Linq to SQL 解决方案,因此无法使用带有索引的 Select 扩展方法。我假设不同的数据库提供者有不同的机制来获取查询的行号。这就是为什么我们需要添加 ToArray()
才能实现查询并使用 (in-memory) Linq to Objects。
除此之外,为了解释我的回答,除了第一个条目之外的所有条目都得到 "Multiple"
。如果我们真的有多个(不同的)NameId
,我们可以确定最后一个条目将包含 "Multiple"
,否则它是 null
或 NameId
。
最后您可能会争辩说我的解决方案的可读性不如罗伯茨,我可能会同意这一点!