LINQ で書いているクエリに関するクエリがあり、誰かが助けてくれることを願っています。基本的に私は以下を持っています(サンプルデータ)
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
そのため、LanguageID や Description など、ユーザーが指定した条件に基づいてレコードを返す必要があります。ここで注意が必要なのは、同じ製品コード、言語、法律の複数のバージョンがある場合、最新バージョンのみを返したいということです。
だから...私のコードは次のとおりです(pLegislationsには、コンマで区切られた法律のリストが含まれています):
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、Language、および Legislation に一致する場合、つまり Language = ' English' および Legislation = 'UK' の場合、次の結果が期待されます。
ProductCode LanguageID LegislationId Version
1234 English UK 2
5678 English UK 1
9999 English UK 2
9999 Spanish Spain 1
前もって感謝します
アンドリュー