বেনামি ধরণের ফলাফল ফেরত দেবেন?


194

নীচের সাধারণ উদাহরণটি ব্যবহার করে, লিনককে এসকিউএল ব্যবহার করে একাধিক টেবিল থেকে ফলাফল ফেরার সর্বোত্তম উপায় কী?

বলুন আমার কাছে দুটি টেবিল রয়েছে:

Dogs:   Name, Age, BreedId
Breeds: BreedId, BreedName

আমি তাদের সাথে সমস্ত কুকুর ফিরিয়ে দিতে চাই BreedName। আমার সমস্ত কুকুরকে কোনও সমস্যা ছাড়াই এমন কিছু ব্যবহার করা উচিত:

public IQueryable<Dog> GetDogs()
{
    var db = new DogDataContext(ConnectString);
    var result = from d in db.Dogs
                 join b in db.Breeds on d.BreedId equals b.BreedId
                 select d;
    return result;
}

তবে আমি যদি প্রজনন সহ কুকুর চাই এবং এটি চেষ্টা করতে পারি তবে আমার সমস্যা আছে:

public IQueryable<Dog> GetDogsWithBreedNames()
{
    var db = new DogDataContext(ConnectString);
    var result = from d in db.Dogs
                 join b in db.Breeds on d.BreedId equals b.BreedId
                 select new
                        {
                            Name = d.Name,
                            BreedName = b.BreedName
                        };
    return result;
}

এখন আমি বুঝতে পেরেছি যে সংকলকটি কুকুরের প্রত্যাশা করার কারণে আমাকে বেনামে টাইপের একটি সেট ফেরত দিতে দেবে না, তবে কাস্টম টাইপ তৈরি না করে এ ফেরানোর কোনও উপায় আছে কি? অথবা আমার নিজের ক্লাসটি তৈরি করতে হবে DogsWithBreedNamesএবং নির্বাচনের ক্ষেত্রে টাইপটি নির্দিষ্ট করতে হবে? বা অন্য কোন সহজ উপায় আছে?


কৌতূহলের বাইরে, সমস্ত লিঙ্ক উদাহরণগুলি বেনামে ব্যবহার করে কেন কাজ না করে তা দেখায়। উদাহরণস্বরূপ, এই উদাহরণটি দেয়foreach (var cust in query) Console.WriteLine("id = {0}, City = {1}", cust.CustomerID, cust.City);
হট লিক্স

@ হট লিকস - এই উদাহরণগুলির মধ্যে গ্রাহক টেবিলটি কোনও শ্রেণি দ্বারা প্রতিনিধিত্ব করা একটি সত্তা। উদাহরণটি কেবল এই শ্রেণীর সংজ্ঞা দেখানোর জন্য উপস্থিত হয় না।
জনাথন এস

বা এটি আপনাকে জানায় না যে একটি সংকলক সুইজল শ্রেণীর নামের সাথে "ভার" প্রতিস্থাপন করছে।
হট লিক্স

উত্তর:


213

আমি এই প্যাটার্নের দিকে যেতে ঝোঁক:

public class DogWithBreed
{
    public Dog Dog { get; set; }
    public string BreedName  { get; set; }
}

public IQueryable<DogWithBreed> GetDogsWithBreedNames()
{
    var db = new DogDataContext(ConnectString);
    var result = from d in db.Dogs
                 join b in db.Breeds on d.BreedId equals b.BreedId
                 select new DogWithBreed()
                        {
                            Dog = d,
                            BreedName = b.BreedName
                        };
    return result;
}

এর অর্থ আপনার একটি অতিরিক্ত বর্গ রয়েছে তবে এটি দ্রুত এবং কোড করা সহজ, সহজেই বর্ধিত, পুনরায় ব্যবহারযোগ্য এবং টাইপ-নিরাপদ।


আমি এই পদ্ধতির পছন্দ করি তবে এখন কুকুরের নাম কীভাবে প্রদর্শন করব তা নিশ্চিত নই। যদি আমি ফলাফলটি কোনও ডেটাগ্রিডের সাথে আবদ্ধ করি, তবে আমি কি কুকুরের সাথে ডগউইথব্রিড শ্রেণিতে স্পষ্টভাবে সংজ্ঞা না দিয়ে সম্পত্তিগুলি পেতে পারি বা আমি যে প্রতিটি ক্ষেত্র প্রদর্শিত করতে চাই তার জন্য গেটর / সেটার তৈরি করতে হবে?
জোনাথন এস

4
ডেটাগ্রিডগুলি কী আপনাকে সম্পত্তি "কুকুরের নাম" হিসাবে নির্দিষ্ট করার অনুমতি দেয় না? আমি এখনই ভুলে গেছি কেন আমি তাদের ঘৃণা করি এগুলি কখনই ব্যবহার করা যায় না ...
teedyay

@JonathanS। আপনি টেমপ্লেট কলামে এটি কীভাবে করেছেন? দয়া করে আমাকে বলুন আমিও একই পরিস্থিতিতে আছি
রাহুলার্যশর্মা

আরে, আমি দুটি ক্লাসকে একটিতে আবদ্ধ করার এই পদ্ধতিটি পছন্দ করি। এটি কাজ করা সহজ করে তোলে। কেবলমাত্র বর্তমান প্রসঙ্গে ব্যবহার করতে সাধারণ ক্লাস তৈরির বিষয়টি উল্লেখ না করে এটিকে আরও পরিষ্কার করা যায়।
গড়িমসি করা

6
এটি ওপি-র যে প্রশ্নের উত্তর দিয়েছে তা সত্যিই উত্তর দেয় না, "কাস্টম টাইপ তৈরি না করে এ ফেরানোর কোনও উপায় আছে"?
tjsज्ञान

69

আপনি বেনামে টাইপ করতে পারেন, তবে এটি সত্যিই সুন্দর নয়

এই ক্ষেত্রে আমি মনে করি উপযুক্ত প্রকারটি তৈরি করা আরও ভাল far যদি এটি কেবল পদ্ধতিযুক্ত ধরণের মধ্যে থেকে ব্যবহার করা হয় তবে এটিকে নেস্টেড টাইপ করুন।

ব্যক্তিগতভাবে আমি সি # পছন্দ করে "নাম দেওয়া নামবিহীন ধরণ" পেতে চাই - অর্থাত্ বেনাম প্রকারের মতো একই আচরণ, তবে নাম এবং সম্পত্তি ঘোষণার সাথে, তবে এটি।

সম্পাদনা: অন্যরা কুকুরকে ফিরিয়ে দেওয়ার পরামর্শ দিচ্ছেন, এবং তারপরে কোনও সম্পত্তি পথের মাধ্যমে বংশের নাম অ্যাক্সেস করার পরামর্শ দিচ্ছেন এটি একটি যথাযথ যুক্তিযুক্ত পদ্ধতি, তবে আইএমই এটি এমন পরিস্থিতিতে নিয়ে যায় যেখানে আপনি যে ডেটা চান তা কোনও নির্দিষ্ট উপায়ে কোয়েরি করেছেন situations ব্যবহার - এবং যে মেটা-তথ্য হারিয়ে যখন আপনি অবশ্য বিনিময়ে IEnumerable<Dog>- QUERY হতে পারে আশা আপনি (বলুন) ব্যবহার করতে Breedবদলে Ownerকয়েকটি লোড অপশন ইত্যাদি কারণে, কিন্তু আপনি যদি যে ভুলে এবং অন্যান্য বৈশিষ্ট্য ব্যবহার শুরু, আপনার অ্যাপ্লিকেশন কাজ করতে পারে কিন্তু আপনি যেমন কল্পনা করেছিলেন তেমন দক্ষতার সাথে নয়। অবশ্যই, আমি আবর্জনা, বা অতিরিক্ত-অনুকূলকরণ ইত্যাদি নিয়ে কথা বলতে পারি ...


3
আরে, আমি যে কারওর সাথে খারাপ ব্যবহার করা হবে সে কারণে ভয়ে বৈশিষ্ট্য চাই না, তবে আপনি কী ধরণের ক্রুফটি কোডটি কল্পনা করতে পারেন যে তারা যদি নামহীন নামগুলি পাস করার অনুমতি দেয় তবে আমরা কী দেখতে পারি? (কাঁপুন)
ডেভ মার্কেল

19
আমরা কিছু অপব্যবহার দেখতে পাবেন। আমরা আরও অনেক সহজ কোড দেখতে পাচ্ছি যেখানে আমরা কেবল একটি মূলত টুপল চাই। না সবকিছু জটিল আচরণ সঙ্গে একটি বস্তু হতে হবে। কখনও কখনও "কেবলমাত্র ডেটা" হ'ল সঠিক জিনিস। আইএমও অবশ্যই
জন স্কিটি

1
ধন্যবাদ, সুতরাং আপনার পছন্দগুলি কি এমন কোনও এক-দর্শন দর্শনের জন্য হলেও প্রকারগুলি তৈরি করা? আমার কাছে প্রচুর প্রতিবেদন রয়েছে যে একই উপায়ে বিভিন্ন উপায়ে টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো তৈরি করার দরকার ছিল না (ডগস উইথব্রিডস, ডগস উইথওউনার নাম, ইত্যাদি)
জোনাথন এস

1
আমি এটিকে বেশ কয়েকটি উপায়ে টুকরো টুকরো করার দরকার নেই, বা এমন জায়গায় টুকরো টুকরো টুকরো রাখার প্রয়োজন নেই যাতে আপনি বেনামে প্রকারগুলি ব্যবহার করতে পারেন - তবে এর বাইরে হ্যাঁ। এটি কিছু উপায়ে চুষে ফেলে, তবে এমন জীবন যা আমি ভীত :(
জন স্কিটি

17

কেবলমাত্র আমার দুটি সেন্টের মূল্য যুক্ত করতে :-) আমি বেনামে অবজেক্টগুলি সামলানোর একটি উপায় শিখেছি। এটি কেবলমাত্র নেট 4 কাঠামোটিকে লক্ষ্য করে ব্যবহার করা যেতে পারে এবং কেবলমাত্র System.Web.dll এ একটি রেফারেন্স যুক্ত করার পরে তবে এটি বেশ সহজ:

...
using System.Web.Routing;
...

class Program
{
    static void Main(string[] args)
    {

        object anonymous = CallMethodThatReturnsObjectOfAnonymousType();
        //WHAT DO I DO WITH THIS?
        //I know! I'll use a RouteValueDictionary from System.Web.dll
        RouteValueDictionary rvd = new RouteValueDictionary(anonymous);
        Console.WriteLine("Hello, my name is {0} and I am a {1}", rvd["Name"], rvd["Occupation"]);
    }

    private static object CallMethodThatReturnsObjectOfAnonymousType()
    {
        return new { Id = 1, Name = "Peter Perhac", Occupation = "Software Developer" };
    }
}

System.Web.dll- এ একটি রেফারেন্স যুক্ত করতে আপনাকে রাশোনারোকের পরামর্শ অনুসরণ করতে হবে : আপনার [প্রকল্পের] লক্ষ্য কাঠামোটি "। নেট ফ্রেমওয়ার্ক 4" নয় "। নেট ফ্রেমওয়ার্ক 4 ক্লায়েন্ট প্রোফাইল" নিশ্চিত করুন Make


2
এএসপি.নেট এমভিসি স্কুল;)
টি-মোটি

8

না আপনি কিছু ছলচাতুরী না করে অজ্ঞাতনামা প্রকারগুলি ফিরিয়ে দিতে পারবেন না।

আপনি যদি সি # ব্যবহার না করে থাকেন তবে আপনি যা খুঁজছেন (কংক্রিটের ধরণ ছাড়াই একাধিক ডেটা ফেরত পাঠানো) তাকে একটি টুপল বলে।

এখানে # টি টুপল বাস্তবায়ন অনেকগুলি রয়েছে, এখানে প্রদর্শিত চিত্রটি ব্যবহার করে আপনার কোডটি এইভাবে কাজ করবে।

public IEnumerable<Tuple<Dog,Breed>> GetDogsWithBreedNames()
{
    var db = new DogDataContext(ConnectString);
    var result = from d in db.Dogs
                 join b in db.Breeds on d.BreedId equals b.BreedId
                 select new Tuple<Dog,Breed>(d, b);

    return result;
}

এবং কলিং সাইটে:

void main() {
    IEnumerable<Tuple<Dog,Breed>> dogs = GetDogsWithBreedNames();
    foreach(Tuple<Dog,Breed> tdog in dogs)
    {
        Console.WriteLine("Dog {0} {1}", tdog.param1.Name, tdog.param2.BreedName);
    }
}

7
এটা কাজ করে না. একটি নোট সাপোর্টড এক্সসেপশন নিক্ষেপ করে : কেবল প্যারামিটারলেস কন্সট্রাক্টর এবং ইনিশিয়ালাইজারগুলি
লিনকিউতে

1
সত্য, টুপল শ্রেণীর ডিফল্ট নির্মাতা নেই এবং এইভাবে LINQ থেকে সত্তাগুলির সাথে সঠিকভাবে কাজ করবে না। এটি লিনকিউ থেকে এসকিউএল হিসাবে প্রশ্নের মতোই কাজ করে। আমি এটি চেষ্টা করি নি, তবে এটির সাথে কাজ করতে পারে ... select Tuple.Create(d, b)
জোশপুরি

1
যেহেতু টিপলসগুলি কিছু লিনকিউ সরবরাহকারী দ্বারা সমর্থিত নয়, আপনি কোনও বেনামি ধরণের নির্বাচন করতে পারবেন না, এটিকে আইনুমারেবলে রূপান্তর করতে পারবেন, তারপরে কোনও টুপল নির্বাচন করতে পারেন?
তেহপায়ার্স

8

আপনি এরকম কিছু করতে পারেন:


public System.Collections.IEnumerable GetDogsWithBreedNames()
{
    var db = new DogDataContext(ConnectString);
    var result = from d in db.Dogs
                 join b in db.Breeds on d.BreedId equals b.BreedId
                 select new
                        {
                            Name = d.Name,
                            BreedName = b.BreedName
                        };
    return result.ToList();
}

8

ToList()ডাটাবেস থেকে সারি নেওয়ার জন্য আপনাকে প্রথমে পদ্ধতিটি ব্যবহার করতে হবে এবং তারপরে শ্রেণি হিসাবে আইটেমগুলি নির্বাচন করতে হবে। এটা চেষ্টা কর:

public partial class Dog {
    public string BreedName  { get; set; }}

List<Dog> GetDogsWithBreedNames(){
    var db = new DogDataContext(ConnectString);
    var result = (from d in db.Dogs
                  join b in db.Breeds on d.BreedId equals b.BreedId
                  select new
                  {
                      Name = d.Name,
                      BreedName = b.BreedName
                  }).ToList()
                    .Select(x=> 
                          new Dog{
                              Name = x.Name,
                              BreedName = x.BreedName,
                          }).ToList();
return result;}

সুতরাং, কৌশলটি প্রথমToList() । এটি তাত্ক্ষণিকভাবে ক্যোয়ারী তৈরি করে এবং ডাটাবেস থেকে ডেটা পায়। দ্বিতীয় কৌশলটি আইটেম নির্বাচন করা এবং অবজেক্ট ইনিশিয়ালাইজার ব্যবহার করা আইটেম লোড হওয়া আইটেমগুলি সহ নতুন অবজেক্ট তৈরি করতে ।

আশাকরি এটা সাহায্য করবে.


8

সি # 7 এ আপনি এখন টিপলস ব্যবহার করতে পারেন! ... যা ফলাফলটি ফেরত দেওয়ার জন্য একটি শ্রেণি তৈরির প্রয়োজনীয়তা দূর করে।

এখানে একটি নমুনা কোড রয়েছে:

public List<(string Name, string BreedName)> GetDogsWithBreedNames()
{
    var db = new DogDataContext(ConnectString);
    var result = from d in db.Dogs
             join b in db.Breeds on d.BreedId equals b.BreedId
             select new
             {
                Name = d.Name,
                BreedName = b.BreedName
             }.ToList();

    return result.Select(r => (r.Name, r.BreedName)).ToList();
}

যদিও আপনার সিস্টেমে ইনস্টল করার দরকার হতে পারে al যদিও ভ্যালুআপল নুগেট প্যাকেজ।


4

এখন আমি বুঝতে পেরেছি যে সংকলকটি কুকুরের প্রত্যাশা করার কারণে আমাকে বেনামে টাইপের একটি সেট ফেরত দিতে দেবে না, তবে কাস্টম টাইপ তৈরি না করে এ ফেরানোর কোনও উপায় আছে কি?

কোনও কাস্টম প্রকার তৈরি না করেই অনামী নামগুলির একটি তালিকা ফেরত দিতে ব্যবহার করুন অবজেক্ট ব্যবহার করুন । এটি সংকলক ত্রুটি ছাড়াই কাজ করবে (। নেট 4.0) in আমি ক্লায়েন্টকে তালিকাটি ফিরিয়ে দিয়েছি এবং এর পরে এটি জাভাস্ক্রিপ্টে পার্স করেছি:

public object GetDogsWithBreedNames()
{
    var db = new DogDataContext(ConnectString);
    var result = from d in db.Dogs
                 join b in db.Breeds on d.BreedId equals b.BreedId
                 select new
                        {
                            Name = d.Name,
                            BreedName = b.BreedName
                        };
    return result;
}

1
আমার মতে এটি আরও সঠিক এবং পঠনযোগ্য হবে যদি আপনার পদ্ধতির স্বাক্ষরটি এমনভাবে দেখা যায়: সর্বজনীন আইনিউবারেবল <বিজেট> গেটডোগস উইথব্রাইডন নেমস ()
পিস্তল-

3

কেবল কুকুর নির্বাচন করুন, তারপরে ব্যবহার করুন dog.Breed.BreedName, এটি ভাল কাজ করা উচিত।

আপনার যদি প্রচুর কুকুর থাকে তবে ডিবি কলগুলির সংখ্যা হ্রাস করতে ডেটালয়ডঅপশনগুলি ব্যবহার করুন o


2

আপনি সরাসরি বেনামে টাইপ করতে পারবেন না, তবে আপনি আপনার জেনেরিক পদ্ধতির মাধ্যমে এগুলি লুপ করতে পারেন। সুতরাং বেশিরভাগ লিনকিউ এক্সটেনশন পদ্ধতি করুন। সেখানে কোনও জাদু নেই, যদিও দেখে মনে হচ্ছে তারা বেনামে ফিরে আসবে। যদি প্যারামিটার বেনামে থাকে তবে ফলাফলও বেনামে থাকতে পারে।

var result = Repeat(new { Name = "Foo Bar", Age = 100 }, 10);

private static IEnumerable<TResult> Repeat<TResult>(TResult element, int count)
{
    for(int i=0; i<count; i++)
    {
        yield return element;
    }
}

মূল প্রশ্ন থেকে কোডের উপর ভিত্তি করে একটি উদাহরণের নীচে:

var result = GetDogsWithBreedNames((Name, BreedName) => new {Name, BreedName });


public static IQueryable<TResult> GetDogsWithBreedNames<TResult>(Func<object, object, TResult> creator)
{
    var db = new DogDataContext(ConnectString);
    var result = from d in db.Dogs
                    join b in db.Breeds on d.BreedId equals b.BreedId
                    select creator(d.Name, b.BreedName);
    return result;
}

0

ঠিক আছে, আপনি যদি কুকুর ফিরিয়ে দিচ্ছেন, তবে আপনি এটি করবেন:

public IQueryable<Dog> GetDogsWithBreedNames()
{
    var db = new DogDataContext(ConnectString);
    return from d in db.Dogs
           join b in db.Breeds on d.BreedId equals b.BreedId
           select d;
}

আপনি যদি ব্রিডটি আগ্রহী-লোডযুক্ত এবং অলস-বোঝা না হয়ে চান তবে কেবল উপযুক্ত ডেটালয়েডঅ্যাপশনগুলি ব্যবহার করুন ।


0

BreedIdমধ্যে Dogটেবিল স্পষ্টত সংশ্লিষ্ট সারিতে একটি বিদেশী চাবিকাঠি Breedটেবিল। যদি আপনার ডাটাবেসটি সঠিকভাবে সেট আপ হয়ে যায় তবে লিনকুই থেকে এসকিউএল স্বয়ংক্রিয়ভাবে দুটি টেবিলের মধ্যে একটি সমিতি তৈরি করা উচিত। ফলস্বরূপ কুকুর শ্রেণীর একটি ব্রিড সম্পত্তি থাকবে এবং ব্রিড শ্রেণীর একটি কুকুরের সংগ্রহ থাকতে হবে। এটিকে সেট আপ করে, আপনি এখনও ফিরে আসতে পারেন IEnumerable<Dog>, যা এমন একটি বস্তু যা বংশের সম্পত্তি অন্তর্ভুক্ত করে। কেবলমাত্র সতর্কতা হ'ল আপনাকে কোয়েরিতে কুকুরের বস্তুগুলির সাথে বংশবৃদ্ধি করতে হবে যাতে ডেটা প্রসঙ্গটি নিষ্পত্তি হওয়ার পরে সেগুলি অ্যাক্সেস করা যায় এবং (যেমন কোনও অন্য পোস্টার প্রস্তাবিত হয়েছে) সংগ্রহের জন্য একটি পদ্ধতি চালিত করে যা ফলে সৃষ্টি করবে তাত্ক্ষণিকভাবে সম্পাদনের জন্য ক্যোয়ারী (এই ক্ষেত্রে টোআর্রে):

public IEnumerable<Dog> GetDogs()
{
    using (var db = new DogDataContext(ConnectString))
    {
        db.LoadOptions.LoadWith<Dog>(i => i.Breed);
        return db.Dogs.ToArray();
    }

}

এটি প্রতিটি কুকুরের জন্য বংশবৃদ্ধি অ্যাক্সেস করার জন্য তুচ্ছ হয়:

foreach (var dog in GetDogs())
{
    Console.WriteLine("Dog's Name: {0}", dog.Name);
    Console.WriteLine("Dog's Breed: {0}", dog.Breed.Name);        
}

0

ডাটাবেস সার্ভারে প্রেরিত এসকিউএল সিলেক্ট স্টেটমেন্টের যদি কেবল প্রয়োজনীয় ক্ষেত্রগুলি থাকে এবং সমস্ত সত্তা ক্ষেত্র না থাকে তবে যদি মূল ধারণাটি হয় তবে আপনি এটি করতে পারেন:

public class Class1
{
    public IList<Car> getCarsByProjectionOnSmallNumberOfProperties()
    {

        try
        {
            //Get the SQL Context:
            CompanyPossessionsDAL.POCOContext.CompanyPossessionsContext dbContext 
                = new CompanyPossessionsDAL.POCOContext.CompanyPossessionsContext();

            //Specify the Context of your main entity e.g. Car:
            var oDBQuery = dbContext.Set<Car>();

            //Project on some of its fields, so the created select statment that is
            // sent to the database server, will have only the required fields By making a new anonymouse type
            var queryProjectedOnSmallSetOfProperties 
                = from x in oDBQuery
                    select new
                    {
                        x.carNo,
                        x.eName,
                        x.aName
                    };

            //Convert the anonymouse type back to the main entity e.g. Car
            var queryConvertAnonymousToOriginal 
                = from x in queryProjectedOnSmallSetOfProperties
                    select new Car
                    {
                        carNo = x.carNo,
                        eName = x.eName,
                        aName = x.aName
                    };

            //return the IList<Car> that is wanted
            var lst = queryConvertAnonymousToOriginal.ToList();
            return lst;

        }
        catch (Exception ex)
        {
            System.Diagnostics.Debug.WriteLine(ex.ToString());
            throw;
        }
    }
}

0

ডায়নামিক ডেটা পেতে এটি চেষ্টা করুন। আপনি তালিকা <> জন্য কোড রূপান্তর করতে পারেন can

public object GetDogsWithBreedNames()
{
    var db = new DogDataContext(ConnectString);
    var result = from d in db.Dogs
                 join b in db.Breeds on d.BreedId equals b.BreedId
                 select new
                        {
                            Name = d.Name,
                            BreedName = b.BreedName
                        };
    return result.FirstOrDefault();
}

dynamic dogInfo=GetDogsWithBreedNames();
var name = dogInfo.GetType().GetProperty("Name").GetValue(dogInfo, null);
var breedName = dogInfo.GetType().GetProperty("BreedName").GetValue(dogInfo, null);

0

আপনার ব্রেডআইডে ফোরইগন কী সংযম নিয়ে আপনার ডাটাবেসে যদি কোনও সম্পর্ক সেটআপ থাকে তবে আপনি কি ইতিমধ্যে এটি পেয়েছেন না?

ডিবিএমএল সম্পর্কের ম্যাপিং

সুতরাং আমি এখন কল করতে পারি:

internal Album GetAlbum(int albumId)
{
    return Albums.SingleOrDefault(a => a.AlbumID == albumId);
}

এবং কোডটিতে যে কল করে:

var album = GetAlbum(1);

foreach (Photo photo in album.Photos)
{
    [...]
}

সুতরাং আপনার উদাহরণস্বরূপ আপনি কুকুরের মতো কিছু কল করবেন। ব্রিড.ব্রিডনাম - যেমনটি আমি বলেছিলাম, এটি এই সম্পর্কগুলির সাথে আপনার ডাটাবেস সেট আপ হওয়ার উপর নির্ভর করে।

অন্যরা যেমন উল্লেখ করেছে, ডেটাএলএডপশনগুলি যদি সমস্যা হয় তবে ডাটাবেস কলগুলি হ্রাস করতে সহায়তা করবে।


0

এটি আপনার প্রশ্নের সঠিক উত্তর দেয় না, তবে গুগল আমাকে কীওয়ার্ডের ভিত্তিতে এখানে নিয়ে গেছে। এইভাবে আপনি কোনও তালিকা থেকে বেনামে টাইপ করতে পারেন:

var anon = model.MyType.Select(x => new { x.Item1, x.Item2});
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.