C# 将多级for循环转换为linq或lambda表达式
我已经发布了如下相关问题: 但是因为我不擅长Linq或Lambda表达式。。我不知道如何进一步扩展它 我有一个稍微不同的3级嵌套for循环,我不知道如何将其转换为Linq或Lambda表达式。。我的任务是在linq或lambda表达式中为以下内容提供更高效的替换代码。。请帮忙。谢谢C# 将多级for循环转换为linq或lambda表达式,c#,linq,lambda,C#,Linq,Lambda,我已经发布了如下相关问题: 但是因为我不擅长Linq或Lambda表达式。。我不知道如何进一步扩展它 我有一个稍微不同的3级嵌套for循环,我不知道如何将其转换为Linq或Lambda表达式。。我的任务是在linq或lambda表达式中为以下内容提供更高效的替换代码。。请帮忙。谢谢 public static void CompareEntities( out EntityCollection<StringResourceEntity> entitiesDifference
public static void CompareEntities(
out EntityCollection<StringResourceEntity> entitiesDifference,
EntityCollection<StringResourceEntity> entitiesLargerSet,
EntityCollection<StringResourceEntity> entitiesSmallerSet)
{
var diff = new EntityCollection<StringResourceEntity>();
string defaultCulture = LocalizationConfiguration.DefaultCulture;
foreach (StringResourceEntity entityLargerSet in entitiesLargerSet)
{
bool entityMatch = false;
foreach (StringResourceEntity entitySmallerSet in entitiesSmallerSet)
{
if (entityLargerSet.Key.Equals(entitySmallerSet.Key))
{
foreach (var stringResValSmall in entitySmallerSet.StringResourceValues)
{
if (stringResValSmall.Culture.Equals(defaultCulture) &&
stringResValSmall.Value.Length > 0)
{
entityMatch = true;
}
}
}
}
if (entityMatch == false)
{
diff.Add(entityLargerSet);
}
}
entitiesDifference = diff;
}
公共静态无效比较(
out EntityCollection EntityDifference,
EntityCollection EntityLargerSet,
EntityCollection EntitysSmallerSet)
{
var diff=新的EntityCollection();
字符串defaultCulture=LocalizationConfiguration.defaultCulture;
foreach(entityLargerSet中的StringResourceEntity entityLargerSet)
{
bool entityMatch=false;
foreach(EntitysSmallerSet中的StringResourceEntity EntitysSmallerSet)
{
if(entityLargerSet.Key.Equals(entitySmallerSet.Key))
{
foreach(entitySmallerSet.StringResourceValues中的变量stringResValSmall)
{
if(stringResValSmall.Culture.Equals)(默认区域性)&&
stringResValSmall.Value.Length>0)
{
entityMatch=true;
}
}
}
}
如果(entityMatch==false)
{
差异添加(entityLargerSet);
}
}
实体差异=差异;
}
这可能会让您开始学习。如果不创建所有类的骨架版本,则很难判断代码是否正确编译或是否会产生正确的结果:
var diff = entitiesLargerSet.Except(
from x in entitiesLargerSet
from y in entitiesSmallerSet
where x.Key.Equals(y.Key)
from z in y.StringResourceValues
where stringResValSmall.Culture.Equals(defaultCulture)
&& stringResValSmall.Value.Length > 0
select x);
这可能会让你开始。如果不创建所有类的骨架版本,则很难判断代码是否正确编译或是否会产生正确的结果:
var diff = entitiesLargerSet.Except(
from x in entitiesLargerSet
from y in entitiesSmallerSet
where x.Key.Equals(y.Key)
from z in y.StringResourceValues
where stringResValSmall.Culture.Equals(defaultCulture)
&& stringResValSmall.Value.Length > 0
select x);
我更喜欢lambda表达式,因为我发现它们非常可读。我会这样做:
var diff = entitiesLargerSet.Where(large =>
!entitiesSmallerSet.Any(small =>
small.Key.Equals(large.Key)
&& small.StringResourceValues.Any(x =>
x.Culture.Equals(defaultCulture) && x.Value.Length > 0))).ToList();
缩进很糟糕,但可以自己做。我更喜欢lambda表达式,因为我觉得它们可读性很强。我会这样做:
var diff = entitiesLargerSet.Where(large =>
!entitiesSmallerSet.Any(small =>
small.Key.Equals(large.Key)
&& small.StringResourceValues.Any(x =>
x.Culture.Equals(defaultCulture) && x.Value.Length > 0))).ToList();
缩进很可怕,但请自己做。谢谢Matt。。这可能只能找到所有匹配项。。我正在寻找不匹配的记录。。谢谢你的帮助。谢谢马特。。这可能只能找到所有匹配项。。我正在寻找不匹配的记录。。谢谢你的帮助。谢谢你。。。我真的很喜欢你的答案,但我要检查一下柯克的答案。再次感谢你!!谢谢你。。。我真的很喜欢你的答案,但我要检查一下柯克的答案。再次感谢你!!柯克,很酷的回答。。非常感谢。。我会回去看看书,确保我理解这一点并以此为基础。再次感谢。柯克,回答得很酷。。非常感谢。。我会回去看看书,确保我理解这一点并以此为基础。再次感谢。