2
bool isExist = objCustomization.CustomSettings.Where(p => p.CustomizationType == selCustomizationType && p.CategoryID == selCategoryID).Any();

if (isExist)
{
    chkFixLimit.Checked = objCustomization.CustomSettings.Where(p => p.CustomizationType == selCustomizationType && p.CategoryID == selCategoryID).FirstOrDefault().IsDefaultLimit;
}
else chkFixLimit.Checked = false;
4

5 回答 5

5

布尔值的默认值是false你甚至不需要任何条件 - 只需选择第一个或默认IsDefaultLimit值:

chkFixLimit.Checked =
   objCustomization.CustomSettings
       .Where(p => p.CustomizationType == selCustomizationType && p.CategoryID == selCategoryID)
       .Select(p => p.IsDefaultLimit)
       .FirstOrDefault();

更新(回答您的评论)如果您有非布尔值或默认值(整数为零)不符合您的要求,如果没有符合您的条件的项目,您可以使用DefaultIfEmpty提供自己的默认值:

maxCountCmb.SelectedIndex = 
    objCustomization.CustomSettings
        .Where(p => p.CustomizationType == selCustomizationType && p.CategoryID == selCategoryID)
        .Select(p => p.DefaultFreeCount)
        .DefaultIfEmpty(-1)
        .First();
于 2013-08-12T09:33:59.140 回答
3

你当然可以:

var item = objCustomization.CustomSettings.FirstOrDefault(p => p.CustomizationType == selCustomizationType && p.CategoryID == selCategoryID);

chkFixLimit.Checked = item != null && item.IsDefaultLimit;

或单个语句,如您所愿:

chkFixLimit.Checked = new Func<bool>(() => {
    var item = objCustomization.CustomSettings.FirstOrDefault(p => p.CustomizationType == selCustomizationType && p.CategoryID == selCategoryID);
    return item != null && item.IsDefaultLimit;
}).Invoke();
于 2013-08-12T09:31:58.223 回答
2

这不是一行,但更具可读性,您可以更改:

var setting = objCustomization.CustomSettings              
                .FirstOrDefault(p => p.CustomizationType == selCustomizationType 
                                  && p.CategoryID == selCategoryID);

chkFixLimit.Checked = setting == null ? false : setting.IsDefaultLimit;
于 2013-08-12T09:31:56.717 回答
2
chkFixLimit.Checked = objCustomization.CustomSettings
  .Where(p => p.CustomizationType == selCustomizationType 
     && p.CategoryID == selCategoryID)
  .Select(c => c.IsDefaultLimit)
  .FirstOrDefault();
于 2013-08-12T09:43:58.560 回答
1

该代码或多或少是该FirstOrDefault方法的用例。如果存在,则返回第一个这样的项目,如果不存在,则返回默认值(null对于引用类型)。所以你可以这样做:

var item = objCustomization.CustomSettings.FirstOrDefault
               (p => p.CustomizationType == selCustomizationType && p.CategoryID)

结果,该item对象将是null(假设您确实使用引用类型),或者它将具有一个值。
之后你可以检查一下,用一个简单的

chkFixLimit.Checked = (item == null) ? false : item.IsDefaultLimit;
于 2013-08-12T09:37:31.733 回答