0

sql(linqから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

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 の連結によって多対多のマッピングが行われていることです。このような関係は、通常、他の 2 つのテーブルから Id のみを含む 3 番目のテーブルを導入することによって行われます。そのような場合、クエリははるかに簡単になります。

于 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 に答える