区别于Linq C#

时间:2014-01-22 14:39:45

标签: c# linq

我有收藏品

从集合中,列名ma_position_value不应包含相同的值

例如

如果集合有5条记录,则列ma_position_value不应包含来自所有5条记录的相同值...但它可以包含来自集合的2或3或4条记录的相同值Atleast一列值应该更改。 / p>

所以主要内涵是所有5条记录不应该包含相同的值。任何一个都应该得到不同的值。所以如果所有5条记录相同我试着抛出一条消息

所以我只是写一个bool来返回它,如果它是改变

bool lblMa = false;
lblMa = ibusCalcWiz.iclbMssPaServiceSummary
        .Where(lbusMssPaServiceSummary => lbusMssPaServiceSummary.icdoSummary.ma_position_value.IsNotNullOrEmpty()).Distinct().Count() > 1;

但它总是回归真实。

2 个答案:

答案 0 :(得分:3)

只需选择不同的ma_position_value属性值:

bool allSame = ibusCalcWiz.iclbMssPaServiceSummary
                          .Select(i => i.ma_position_value)
                          .Distinct()
                          .Count() == 1;

提示:不要在lambda表达式中使用长变量名。有一个经验法则 - 变量使用范围越大,名称越大。如果范围非常小(lambda表达式),那么名称应该非常小(单个字母就足够了)。

答案 1 :(得分:0)

你可以得到第一个,并检查它们是否相等:

// Only works if the collection is non-empty!
string first_ma_position_value = ibusCalcWiz.iclbMssPaServiceSummary.First().ma_position_value;
bool allTheSame = ibusCalcWiz.iclbMssPaServiceSummary
   .All(lbusMssPaServiceSummary.icdoSummary.ma_position_value == first_ma_position_value);

或者您可以按照您原来的要求执行不同的操作,但是可以使用列的值而不是对象

bool allTheSame = ibusCalcWiz.iclbMssPaServiceSummary
               .Select(lbusMssPaServiceSummary => lbusMssPaServiceSummary.icdoSummary.ma_position_value)
               .Distinct()
               .Count() == 1;