Aks*_*iti 5 c# linq entity-framework
我有一个字符串列表的列表,即Currency Code
.
var currencyCode = new List<string>() { "USD", "SGD", "KWD", "BHD", "LYD" };
Run Code Online (Sandbox Code Playgroud)
我还有另一个复杂的对象。
var rate = new List<Rate>()
{
new Rate() { CurrencyName = "USD (SMALL)",CurrencyCode = "USD SMALL",BranchName="Branch1"},
new Rate() { CurrencyName = "SGD BIG",CurrencyCode = "SGD BIG",BranchName="Branch1"},
new Rate() { CurrencyName = "KUWAIT DINAR",CurrencyCode = "KWD",BranchName="Branch1"},
new Rate() { CurrencyName = "USD BIG (100,50)",CurrencyCode = "USD BIG",BranchName="Branch1"},
new Rate() { CurrencyName = "USD MEDIUM (10,20)",CurrencyCode = "USD MEDIUM",BranchName="Branch1"},
};
Run Code Online (Sandbox Code Playgroud)
我将在以下列表中找到匹配的货币:
var matchedCurrency = from c in rate
where currency.Any(w => c.CurrencyCode.Contains(w))
select c;
Run Code Online (Sandbox Code Playgroud)
我想要的是匹配的货币列表应该分组,按货币代码分组。
我尝试了以下方法,但没有奏效。
var Grp = rate.GroupBy(item => currency.Any(w => item.CurrencyCode.Contains(w)))
.Select(group => new
{
group.Key,
DataList = group.ToList()
});
Run Code Online (Sandbox Code Playgroud)
我不明白我真的失踪了。我尝试过各种方法。
我知道我可以遍历rate
并推入另一个对象。但这看起来不太好,我想通过使用 Linq 来做到这一点。但我无法达到这一点。
输出将与此对象一起显示:
public class CurrencyMap
{
public string Code { get; set; }
public List<Currency> currency { get; set; }
}
public class Currency
{
public string CurrencyName { get; set; }
public string CurrencyCode { get; set; }
public string BranchName { get; set; }
}
enter code here
Run Code Online (Sandbox Code Playgroud)
编辑:
一开始我错过了这些东西,但如果在费率中找不到匹配的代码,我也需要有空列表。
在 Rate 中,没有“BHD”、“LYD”的匹配列表。但我还需要有代码为“BHD”、“LYD”的空列表
首先选择匹配的货币代码,然后按所选代码进行分组。
var groupedRates = rate
.Select(r => new
{
rate = r,
code = currencyCode.FirstOrDefault(c => r.CurrencyCode.Contains(c))
})
.GroupBy(x => x.code, x => x.rate); //maybe you don't want to throw away the resolved code like I do in the element selector...
Run Code Online (Sandbox Code Playgroud)
编辑:我想我有点专注于分组方面。由于您想要包含所有货币代码并提到特定的输出结构,因此无需考虑分组,只需选择您的结果:
var groupedRatesList = currencyCode
.Select(c => new CurrencyMap
{
Code = c,
currency = rate
.Where(x => x.CurrencyCode.Contains(c))
.Select(x => new Currency
{
BranchName = x.BranchName,
CurrencyCode = x.CurrencyCode, // or maybe you want to insert c here?
CurrencyName = x.CurrencyName
})
.ToList()
})
.ToList();
Run Code Online (Sandbox Code Playgroud)