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# LINQ到SQL-跨多个列的不同记录_C#_Linq - Fatal编程技术网

C# LINQ到SQL-跨多个列的不同记录

C# LINQ到SQL-跨多个列的不同记录,c#,linq,C#,Linq,我有一个关于我用LINQ写的一个问题的问题,我希望有人能帮我。基本上我有以下(示例数据) 因此,我需要做的是根据用户提供的条件返回记录,包括LanguageID和描述。这里棘手的部分是,如果有相同产品代码、语言和法规的多个版本,那么我只想返回最新版本 因此,我的现行法规如下(法规包含一份单独的立法清单): 提前谢谢 Andrew根据ProductCode(1)对结果进行分组,并从每个分组项目中选择最大版本值(2): 按ProductCode(1)对结果进行分组,并从每个分组项目中选择最大Vers

我有一个关于我用LINQ写的一个问题的问题,我希望有人能帮我。基本上我有以下(示例数据)

因此,我需要做的是根据用户提供的条件返回记录,包括LanguageID和描述。这里棘手的部分是,如果有相同产品代码、语言和法规的多个版本,那么我只想返回最新版本

因此,我的现行法规如下(法规包含一份单独的立法清单):

提前谢谢


Andrew

根据
ProductCode
(1)对结果进行分组,并从每个分组项目中选择最大
版本
值(2):


ProductCode
(1)对结果进行分组,并从每个分组项目中选择最大
Version
值(2):

ProductCode  LanguageID   LegislationId   Version
1234         English       UK              1
1234         English       UK              2
5678         English       UK              1
9999         English       UK              1
9999         English       UK              2
9999         Spanish       Spain           1
List<string> legList = pLegislations.Split(',').ToList();
IEnumerable<MyClass> results = null;

results = (from a in context.ALLProducts
           let prodCode = a.ProductCode
           let prodDesc = a.ProductDescription
           where legList.Contains(a.LegislationID) &&
                 (a.LanguageID == pLanguage || pLanguage == null) &&
                  a.BrandName == pMarket &&
                 (prodCode.Contains(pSearch) || prodDesc.Contains(pSearch) || 
                                                pSearch == string.Empty) &&
                 prodCode[0] != 'x' &&
                ((pMarket == "testMarket") ? prodCode.StartsWith("0") : true)
                select new MyClass
                {
                   BrandName = a.BrandName,
                   BulkCode = prodCode,
                   BulkDescription = prodDesc,
                   Language = a.LanguageName,
                   LanguageCode = a.LanguageID
                }).ToList();
ProductCode  LanguageID   LegislationId   Version
1234         English       UK              2
5678         English       UK              1
9999         English       UK              2
9999         Spanish       Spain           1
results = (from a in context.ALLProducts
           let prodCode = a.ProductCode
           let prodDesc = a.ProductDescription
           where legList.Contains(a.LegislationID) &&
                 (a.LanguageID == pLanguage || pLanguage == null) &&
                  a.BrandName == pMarket &&
                 (prodCode.Contains(pSearch) || 
                  prodDesc.Contains(pSearch) || 
                  pSearch == string.Empty) &&
                  prodCode[0] != 'x' &&
                 ((pMarket == "testMarket") ? prodCode.StartsWith("0") : true)
           group a by a.ProductCode into g // 1
           let lastProduct = g.OrderByDescending(x => x.Version).First() // 2
           select new MyClass
                {
                   BrandName = lastProduct.BrandName,
                   BulkCode = prodCode,
                   BulkDescription = prodDesc,
                   Language = lastProduct.LanguageName,
                   LanguageCode = lastProduct.LanguageID
                }).ToList();