Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将多级for循环转换为linq或lambda表达式_C#_Linq_Lambda - Fatal编程技术网

C# 将多级for循环转换为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

我已经发布了如下相关问题:

但是因为我不擅长Linq或Lambda表达式。。我不知道如何进一步扩展它

我有一个稍微不同的3级嵌套for循环,我不知道如何将其转换为Linq或Lambda表达式。。我的任务是在linq或lambda表达式中为以下内容提供更高效的替换代码。。请帮忙。谢谢

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。。这可能只能找到所有匹配项。。我正在寻找不匹配的记录。。谢谢你的帮助。谢谢马特。。这可能只能找到所有匹配项。。我正在寻找不匹配的记录。。谢谢你的帮助。谢谢你。。。我真的很喜欢你的答案,但我要检查一下柯克的答案。再次感谢你!!谢谢你。。。我真的很喜欢你的答案,但我要检查一下柯克的答案。再次感谢你!!柯克,很酷的回答。。非常感谢。。我会回去看看书,确保我理解这一点并以此为基础。再次感谢。柯克,回答得很酷。。非常感谢。。我会回去看看书,确保我理解这一点并以此为基础。再次感谢。