C# 是否可以从类列表中创建最适合的Linq查询?

C# 是否可以从类列表中创建最适合的Linq查询?,c#,linq,C#,Linq,嗨,我有一个函数,它从集合中返回类的最佳匹配。我知道如何使用linq查询替换foreach语句以获得新列表,但我想知道是否可以使用linq语句返回一个结果,该语句将等同于最佳拟合,类似于下面的代码 private ProductDefaults GetBestFitProductDefault(Product product,IList<ProductDefaults> defaultList, ProductDefaultsTypeEnum type) {

嗨,我有一个函数,它从集合中返回类的最佳匹配。我知道如何使用linq查询替换foreach语句以获得新列表,但我想知道是否可以使用linq语句返回一个结果,该语句将等同于最佳拟合,类似于下面的代码

private ProductDefaults GetBestFitProductDefault(Product product,IList<ProductDefaults> defaultList, ProductDefaultsTypeEnum type)
    {
        ProductDefaults pdef = null;
        var matches = -1;
        var bestfit = matches;
        foreach (var def in defaultList)
        {
            if(def.DefaultType == type)
            {
                matches = 0;
                if (def.Level1Ref == product.Level1Ref)
                {
                    matches++;
                }
                if (def.Level2Ref == product.Level2Ref)
                {
                    matches++;
                }
                if (def.Level3Ref == product.Level3Ref)
                {
                    matches++;
                }
                if (def.Level4Ref == product.Level4Ref)
                {
                    matches++;
                }
                if (def.Level5Ref == product.Level5Ref)
                {
                    matches++;
                }
                if (def.Level6Ref == product.Level6Ref)
                {
                    matches++;
                }
                if(matches > bestfit)
                {
                    bestfit = matches;
                    pdef = def;
                }
            }
        }
        return pdef;
    }
private ProductDefaults GetBestFitProductDefault(产品产品、IList defaultList、ProductDefaultStyPeanum类型)
{
ProductDefaults pdef=null;
var匹配=-1;
var-bestfit=匹配;
foreach(默认列表中的var def)
{
if(def.DefaultType==type)
{
匹配=0;
if(def.Level1Ref==product.Level1Ref)
{
匹配++;
}
if(def.Level2Ref==product.Level2Ref)
{
匹配++;
}
if(def.Level3Ref==product.Level3Ref)
{
匹配++;
}
if(def.Level4Ref==产品Level4Ref)
{
匹配++;
}
if(def.Level5Ref==产品Level5Ref)
{
匹配++;
}
if(def.Level6Ref==产品Level6Ref)
{
匹配++;
}
如果(匹配>最佳拟合)
{
最佳拟合=匹配;
pdef=def;
}
}
}
返回pdef;
}

经过一番研究,我提出了这个Linq查询来替换代码,希望这能帮助其他可能需要类似解决方案的人。let允许我创建一个新列来计算最佳拟合或匹配数。通过按最佳拟合对结果进行降序,我确信第一个对象将具有最高的最佳拟合值,因此是我需要的对象。可能有多个产品具有相同的最佳拟合分数。在这种情况下,选择哪一个是随机的,但在我的情况下,这是可以接受的

private ProductDefaults GetBestFitProductDefault(Product product, IList<ProductDefaults> defaultList, ProductDefaultsTypeEnum type)
    {
        ProductDefaults pdef = null;
        var list =
                    from pd in defaultList
                    let bestfit = pd.Level1Ref == product.Level1Ref ? 1 : 0 +
                                  pd.Level2Ref == product.Level2Ref ? 1 : 0 +
                                  pd.Level3Ref == product.Level3Ref ? 1 : 0 +
                                  pd.Level4Ref == product.Level4Ref ? 1 : 0 +
                                  pd.Level5Ref == product.Level5Ref ? 1 : 0 +
                                  pd.Level6Ref == product.Level6Ref ? 1 : 0
                    where pd.DefaultType == type
                    orderby bestfit descending
                    group pd by bestfit into pdl
                    select new { pdl.Key, best = pdl.ToList() };

        pdef = list.First().best.FirstOrDefault();
        return pdef;
    }
private ProductDefaults GetBestFitProductDefault(产品产品、IList defaultList、ProductDefaultStyPeanum类型)
{
ProductDefaults pdef=null;
变量表=
来自defaultList中的pd
设bestfit=pd.Level1Ref==product.Level1Ref?1:0+
pd.Level2Ref==product.Level2Ref?1:0+
pd.Level3Ref==product.Level3Ref?1:0+
pd.Level4Ref==product.Level4Ref?1:0+
pd.Level5Ref==product.Level5Ref?1:0+
pd.Level6Ref==product.Level6Ref?1:0
其中pd.DefaultType==类型
按最佳拟合递减排序
通过最佳拟合将pd分组到pdl中
选择new{pdl.Key,best=pdl.ToList()};
pdef=list.First().best.FirstOrDefault();
返回pdef;
}

您可以使用
LINQ
获取指定
DefaultType
的列表,否则我看不出
LINQ
会有什么帮助谢谢您的回复,我只是想知道这是否可能,但如果没有担心的话。