PDA

View Full Version : رابطه LINQ , Join, navigation properties



alireza_rashvand
سه شنبه 14 مرداد 1393, 13:03 عصر
با سلام خدمت دوستان

در ادامه یادگیری MVC متوجه شدم که باید LINQ رو یاد گرفت,
و متوجه شدم که با "خواص راهبردی( navigation properties)" (http://www.dotnettips.info/post/1039/%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D8%AE%D9%88%D8%A7%D8%B5-%D8%B1%D8%A7%D9%87%D8%A8%D8%B1%DB%8C-%D8%AF%D8%B1-entity-framework-%D8%A8%D8%AC%D8%A7%DB%8C-join-%D9%86%D9%88%DB%8C%D8%B3%DB%8C) می توان خیلی از کد نویسی LINQ را ساده تر انجام داد...

من برای نمایش یک پست همراه با اطلاعات نویسنده نیاز به یک join دارم که هم پست و هم نویسنده را یکجا داشته باشم (مثال ساده ایست برای یادگیری)

کد ساده SQL:

SELECT dbo.Posts.*, dbo.Users.Name, dbo.Users.LastName
FROM dbo.Posts INNER JOIN
dbo.Users ON dbo.Posts.UserId = dbo.Users.Id


کد LINQ:
؟

navigation properties:
؟


سوال کلی: برای یادگیری LINQ و navigation properties برای استفاده در MVC هم اگر منبعی هست لطفا بفرمایید.
سپاس.

hadi0x7c7
سه شنبه 14 مرداد 1393, 13:56 عصر
این مثال فکر کنم درست کار کنه و چیزی باشه که شما میخواین:
class Post{
int id;
string title;
string content;
virtual User Writer;
}

class user{
int id;
string name;
virtual List<Post> posts;
}

نمایش پست یک کاربر با نامش

var post_name = from c in context.Posts
where c.id == my_id
select new {c.title, c.Writer.Name};

alireza_rashvand
سه شنبه 14 مرداد 1393, 18:56 عصر
سپاس از شما , نکته خوبی رو یادگرفتم.. ولی در این تاپیک بیشتر به دنبال یادگیری هستم تا حل مشکل,
می خواهم ببینم کد LINQ و navigation properties جطوری می شه که یاد بگیرم...

hadi0x7c7
سه شنبه 14 مرداد 1393, 20:37 عصر
سپاس از شما , نکته خوبی رو یادگرفتم.. ولی در این تاپیک بیشتر به دنبال یادگیری هستم تا حل مشکل,
می خواهم ببینم کد LINQ و navigation properties جطوری می شه که یاد بگیرم...
چیز خاصی نیست، شما وقتی DB رو بخوای بسازی، لاجرم باید این فیلدا رو توی مدلت بزاری، و بعد احتمالا با FluentAPI رابطه ها رو بسازی، یه سرچ بزن، lazy loading و eagor loading در EF مطالب خوبی پیدا میکنی.

Cybersilent
سه شنبه 21 مرداد 1393, 09:46 صبح
مطالعه این مقالات میتونه بهتون کمک کنه:
استفاده از خواص راهبری در Entity framework بجای Join نویسی (http://www.dotnettips.info/post/1039/%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D8%AE%D9%88%D8%A7%D8%B5-%D8%B1%D8%A7%D9%87%D8%A8%D8%B1%DB%8C-%D8%AF%D8%B1-entity-framework-%D8%A8%D8%AC%D8%A7%DB%8C-join-%D9%86%D9%88%DB%8C%D8%B3%DB%8C)
استفاده از خواص راهبری در EF Code first جهت ساده سازی کوئر‌ی‌ها (http://www.dotnettips.info/post/1036/%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D8%AE%D9%88%D8%A7%D8%B5-%D8%B1%D8%A7%D9%87%D8%A8%D8%B1%DB%8C-%D8%AF%D8%B1-ef-code-first-%D8%AC%D9%87%D8%AA-%D8%B3%D8%A7%D8%AF%D9%87-%D8%B3%D8%A7%D8%B2%DB%8C-%DA%A9%D9%88%D9%8A%D8%B1%E2%80%8C%DB%8C%E2%80%8C%D 9%87%D8%A7)