当使用equal和%时,内部连接不工作,这是像使用%一样使用它的另一种方式
本文关键字:一样 方式 另一种 工作 equal 内部 连接 | 更新日期: 2023-09-27 18:02:26
我有一个Medal类,我调用一个服务,返回除了ArabicName和ISOCode两个字段之外的所有Medal类字段;我必须把它们从另一个表类"CountrysTBLs",我做了这个连接代码:
奖章类:
public class Medals {
public int bronze_count { get; set; }
public string country_name { get; set; }
public int gold_count { get; set; }
public string id { get; set; }
public int place { get; set; }
public int silver_count { get; set; }
public int total_count { get; set; }
public string ArabicName { get; set; } // this field not return by service
public string ISOCode { get; set; } // this field not return by service
}
代码:
var cntrs = db.CountrysTBLs.ToList();
List<Medals> objs = call_Service_Of_Medals_Without_ISOCode();
IEnumerable<Medals> query = from obj in objs
join cntry in cntrs on obj.country_name equals '%' + cntry.CommonName + '%'
select new Medals
{
ArabicName = cntry.ArabicName,
ISOCode = cntry.ISOCode,
country_name = obj.country_name,
place = obj.place,
gold_count = obj.gold_count,
silver_count = obj.silver_count,
bronze_count = obj.bronze_count,
total_count = obj.total_count
};
我没有得到结果?!
如何解决这个问题?是否有任何方法来带来两个字段(ISOCode, ArabicName),甚至不使用内部连接,并在同一时间的最佳性能?
您想要这样的东西来实现LIKE
功能
List<Medals> medals = new List<Medals>();
var list = medals.Select(x => new
{
obj = x,
country = countries.FirstOrDefault(c => c.CommonName.Contains(x.country_name))
});
或者类似的东西(如果你只是想充实每个奖章)
foreach (var medal in medals)
{
var country = countries.FirstOrDefault(c => c.CommonName.Contains(x.country_name));
medal.ISOCode = country.ISOCode;
medal.ArabicName = country.ArabicName;
}
请注意,这不如关键字是国家名称的国家Dictionary<string,Coutnry>
的性能,但是当您需要LIKE
比较时,您需要引入自定义数据结构,例如Lucene索引以进行快速查找。但是先检查一下,如果列表足够小,可能就不会有问题。否则,为什么不使Medal.Country_Name
和Country.Name
相同?所以你可以快速查找字典(哈希表)