当使用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),甚至不使用内部连接,并在同一时间的最佳性能?

当使用equal和%时,内部连接不工作,这是像使用%一样使用它的另一种方式

您想要这样的东西来实现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_NameCountry.Name相同?所以你可以快速查找字典(哈希表)