2010-01-06 8 views
5

मेरे पास निम्न दो तालिकाओं (बुनियादी रूपरेखा):एक सूची के रूप में एक दृश्य में अनेक तालिका से डेटा प्रदर्शित - ASP.Net MVC

Tbl_CategoryType

आईडी LevelID विवरण

Tbl_Levels आईडी नाम

असल में, मैं Tbl_Levels.Name डेटा का संदर्भ देते समय Tbl_CategoryType तालिका में सभी जानकारी प्रस्तुत करना चाहता हूं Tbl_CategoryType.LevelID संख्या के आधार पर।

मैंने नीचे अपने भंडार में शामिल होने का उपयोग करने का प्रयास किया है;

public IQueryable GetAllTypesInCategory(int CatID) 
{ 
    return (from x in DBEntities.LU_LST_CategoryTypeSet 
      where x.CategoryID == CatID && x.Enabled == 1 
      join y in DBEntities.LU_LST_LevelSet on x.LevelID equals y.ID 
      select new {x, y}); 
} 

हालांकि, जब मुझे लगता है कि विधि कॉल कोई प्रकार मैं के रूप में यह दोनों में से किसी श्रेणी या स्तर प्रकार में फिट नहीं करता है को असाइन कर सकें है।

मुझे लगता है कि मुझे कस्टम व्यूमोडेल के माध्यम से ऐसा करने की आवश्यकता है लेकिन चरणों को समझ नहीं सकते हैं।

अग्रिम

उत्तर

3

यदि दो इकाइयों के बीच कोई संबंध है तो आप इसका उपयोग करके दूसरे प्रकार तक पहुंच सकते हैं। उस मामले में आपको केवल एक चीज करने की आवश्यकता है जो एसोसिएशन डेटा लोड करने के लिए Include() विधि का उपयोग करें।

 public List<LU_LST_CategoryType> GetAllTypesInCategory(int CatID) 
     { 
      return (from x in DBEntities.LU_LST_CategoryTypeSet.Include("LU_LST_LevelSet") 
        where x.CategoryID == CatID && x.Enabled == 1 
        select x).ToList(); 
     } 

हर LU_LST_CategoryTypeSet category के लिए से आप कॉल कर सकते हैं category.LU_LST_Level

+1

धन्यवाद, यह काम किया। – shif

4

धन्यवाद अपने LINQ बयान में इस लाइन का उपयोग करके:

select new {x, y} 

आप एक नया गुमनाम प्रकार, जो आपके इकाई प्रकार से एक अलग प्रकार का है बना रहे हैं।

मुझे लगता है कि आप एंटिटीफ्रेमवर्क या कुछ अन्य भारी ढांचे का उपयोग नहीं कर रहे हैं जो लिंक किए गए इकाइयों को बनाने के लिए स्वचालित रूप से विदेशी कुंजी संबंधों को हल करेंगे। यदि सही है, तो हाँ, आपको एक व्यूमोडेल बनाना होगा।

बस एक साधारण रैपर वर्ग बनाएं जिसमें प्रत्येक इकाई में से एक संपत्ति के रूप में हो।

public class MyViewModel 
{ 
    public MyViewModel(LU_LST_CategoryTypeSet x, LU_LST_LevelSet y) 
    { 
     Category = x; 
     Level = y; 
    } 

    public LU_LST_CategoryTypeSet Category { get; set;} 
    public LU_LST_LevelSet Level { get; set; } 
} 
अपने Linq बयान में

फिर, बजाय गुमनाम टाइप बनाने के, MyViewModel प्रकार बना:

public IQueryable GetAllTypesInCategory(int CatID) 
{ 
    return (from x in DBEntities.LU_LST_CategoryTypeSet 
      where x.CategoryID == CatID && x.Enabled == 1 
      join y in DBEntities.LU_LST_LevelSet on x.LevelID equals y.ID 
      select new {x, y}); 
} 

फिर अपने मॉडल वर्गों में परिणाम कॉपी:

var listOfTypes = GetAllTypesInCategory(catID); 
    foreach (var item in listOfTypes) 
    { 
     var model = new MyViewModel(item.x, item.y); 

     //Do whatever with the model to get it to the view. 
    } 

अपने दृश्य इनहेरिट बनाओ MyViewModel से।

+0

यह काम नहीं करेगा। आपको अनाम प्रकार बनाना होगा और फिर MyViewModel संग्रह में डेटा कॉपी करना होगा। – LukLed

+0

ओह, हाँ ऐसा लगता है कि उसकी विधि एक IQueryable चाहता है। जगह के लिए धन्यवाद। – womp

+0

मुझे खेद है कि मैं उल्लेख करना भूल गया था कि मैं इकाई फ्रेमवर्क का उपयोग कर रहा था। – shif

संबंधित मुद्दे