0

我有以下代码用于从 sql(linq to sql) 读取数据

对于 strSkillchk,我可以根据提供的值传递单个值或多个值,我需要输出

 string[] strSkillchk = new string[] {"10,11"};
 var getskilldim = (from tblskilldim in Skill_Dimensions
 where tblskilldim.Status == true && strSkillchk.Contains(tblskilldim.SkillSetId.ToString())
         select new Class
         {
             SkillDimenId = tblskilldim.SkillDimenId,
             SkillDimenName = tblskilldim.SkillDimenName
         }).ToList();

我的 sql 表看起来像

SkillDimenId    SkillDimenName   SkillSetId
  1                 Dimen1          10,11
  2                 Dimen2          11
  3                 Dimen3          10

但是当我执行上面的查询时,它只给了我第 2 行和第 3 行但是我想要以下输出,

SkillDimenId      SkillDimenName      SkillSetId
  1                 Dimen1              10
  1                 Dimen1              11
  2                 Dimen2              11
  3                 Dimen3              10

任何 1 都可以帮我解决 linq to sql c# 的这个问题吗

4

2 回答 2

2

你需要做的是改变

strSkillchk.Contains(tblskilldim.SkillSetId.ToString())

tblskilldim.SkillSetId.Split(',').Any(x=>strSkillchk.Contains(x))

但我真诚地怀疑 liq to sql 会处理这样的请求,即使这样它也会返回

  1                 Dimen1          10,11
  2                 Dimen2          11
  3                 Dimen3          10

您的数据库的问题在于您通过 id 的连接完成了多对多的映射。这种关系通常是通过引入第三个表来完成的,该表只包含其他两个表的 ID。在这种情况下,您的查询会容易得多。

于 2012-12-20T06:49:23.050 回答
0

你好,我能够得到与此类似的输出

  1                 Dimen1          10,11
  2                 Dimen2          11
  3                 Dimen3          10

使用下面的代码,希望对你有帮助

    public class SKillIDDemo
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public string SkillSetID { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            List<SKillIDDemo> demos = new List<SKillIDDemo>();

            demos.Add(new SKillIDDemo() { ID = 1, Name = "demo1", SkillSetID = "10,1" });
            demos.Add(new SKillIDDemo() { ID = 2, Name = "demo2", SkillSetID = "10" });
            demos.Add(new SKillIDDemo() { ID = 3, Name = "demo3", SkillSetID = "1" });
            demos.Add(new SKillIDDemo() { ID = 4, Name = "demo4", SkillSetID = "12" });

            string[] skillset = { "10","1" };

            var testme =   demos.Where(x=> skillset.Any(a=> x.SkillSetID.Split(new char[] {','}, StringSplitOptions.RemoveEmptyEntries).Contains(a))).ToList();

            testme.ForEach(g=> Console.WriteLine(g.Name));  

            Console.ReadLine();
        }
    }
于 2012-12-24T07:43:01.383 回答