2012-12-20 47 views
0

我有下面的代碼用於從SQL讀取數據(LINQ到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 &但 我想要的follwing輸出,

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

可以在任何1分幫助我解決這個問題的LINQ to SQL C#

回答

2

什麼,你需要做的是改變

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

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

但我真誠地懷疑,liq sql將處理這樣的請求,即使這樣,它會返回

1     Dimen1   10,11 
    2     Dimen2   11 
    3     Dimen3   10 

有什麼問題你的數據庫是,你有很多很多的映射通過IDS的拼接完成。這種關係通常通過引入第三個表格來完成,該表格僅包含來自另外兩個的Id。在這種情況下,您的查詢將更容易。

+0

感謝您的反饋。它給sql不支持代碼錯誤。我會想出你的想法,我會創建第三張表,在這張表中映射Id。感謝您的建議。 – saranya

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(); 
     } 
    }