เอาท์พุทวิธีรายการแบบเลื่อนลง ICollection ที่สอดคล้องกับแบบสอบถามแบบฟอร์มคอลเลกชัน

มี 2 ​​นางแบบ (หนังและนักแสดง)

ฉันสามารถเรียกดูรายการภาพยนตร์ที่มีนักแสดงที่เลือกไว้ได้แล้ว และฉันสามารถส่งออกทั้งหมดผ่าน Html.DisplayNameFor แต่ฉันต้องการใช้ DDL เพื่อส่งออก Icollection Actors แทนที่จะวนด้วยรายการย่อยใน @Html.DisplayNameFor(model => model.Actors) ดังนั้นฉันจึงต้องการรายการแบบเลื่อนลงที่สอดคล้องกับSelectedList Actor เอาต์พุตเริ่มต้นคือทั้งหมด/ และถ้าฉันเลือกพารามิเตอร์ภาพยนตร์ที่เฉพาะเจาะจง เช่น ประเภทหรืองบประมาณ มากกว่า DDL ที่มีนักแสดง ควรสอดคล้องกับสิ่งนี้

public class Movie
{
    public int MovieID { get; set; }
    public string Title { get; set; }
    public string  Date { get; set; }
    public int Budget { get; set; }
    public string  Genre { get; set; }
    public virtual ICollection<Actor> Actors { get; set; }
}

public class Actor
{  
    public int ID { get; set;}
    public string Name { get; set; }
    public virtual ICollection<Movie> Movies { get; set; }
}

ฉันตระหนักถึงผลลัพธ์ด้วย

   <th>
        @Html.DisplayNameFor(model => model.Genre)
    </th>........................

    <th>.........................
        @Html.DisplayNameFor(model => model.Actors)
    </th>...............

ด้วยคอลเลกชัน Actors ฉันต้องการแบบฟอร์มอื่นสำหรับเอาต์พุตทุกแถว เพราะหนังทุกเรื่องสามารถมีนักแสดงได้หลายคน หากนักแสดงมีคอลัมน์จำนวนมาก ฉันจะซ่อนได้อย่างไร หรือส่งออกปริมาณที่มีความสามารถในการขยายออกบ้าง? ฉันเลือกที่จะเพิ่มลงใน DropDownList บางทีรูปแบบ AJAX ใหม่หรือองค์ประกอบ asp.net อาจเป็นทางเลือกที่ดี

ดังนั้นฉันจึงมี MovieController:

if (!String.IsNullOrEmpty(SearchActor))
{             
    Movie = Movie.Where(c => c.Actors.Any(i => i.Name.Contains(SearchActor)));
}

return View(Movie.ToList());

มันส่งคืนภาพยนตร์ ฉันจะดึง Actors.Name (สตริง) จาก Movie ที่สอดคล้องกับ Actor ICollection ได้อย่างไร

ฉันจะเพิ่มสตริงนี้ใน DDL


person streamc    schedule 18.06.2016    source แหล่งที่มา
comment
ฉันไม่ค่อยเข้าใจคำถามใช่ไหม? คุณต้องการชื่อนักแสดงคนแรกหรือรายชื่อนักแสดงแยกตามภาพยนตร์? อย่างที่คุณบอกว่าคุณต้องการสตริง   -  person SWilko    schedule 18.06.2016
comment
ฉันสามารถเรียกดูรายการภาพยนตร์ที่มีนักแสดงที่เลือกไว้ได้แล้ว และฉันสามารถส่งออกทั้งหมดผ่าน Html.DisplayNameFor แต่ฉันต้องการใช้ DDL เพื่อส่งออก Icollection Actors แทนที่จะวนรอบด้วยรายการย่อยใน @Html.DisplayNameFor(model =› model.Actors) ดังนั้นฉันจึงต้องการรายการแบบเลื่อนลงที่สอดคล้องกับSelectedList Actor เอาต์พุตเริ่มต้นคือทั้งหมด/ และถ้าฉันเลือกพารามิเตอร์ภาพยนตร์ที่เฉพาะเจาะจง เช่น ประเภทหรืองบประมาณ มากกว่า DDL ที่มีนักแสดง ควรสอดคล้องกับสิ่งนี้ ขอบคุณ! พยายามที่จะชัดเจนมากขึ้น ฉันแก้ไขคำถามของฉัน   -  person streamc    schedule 19.06.2016
comment
คำถามของคุณคืออะไร? จะแสดงรายการแบบเลื่อนลงได้อย่างไร?   -  person Gert Arnold    schedule 19.06.2016
comment
รายการแบบเลื่อนลงเอาต์พุตพร้อมการเปลี่ยนแปลงคอลเลกชันนักแสดงแบบไดนามิกขึ้นอยู่กับภาพยนตร์ที่ฉันเลือก   -  person streamc    schedule 19.06.2016


คำตอบ (1)


ลองสิ่งนี้

var actors = Movie.Where(c => c.Actors.Any(i => i.Name.Contains(SearchActor))).SelectMany(i => i.Actors);
person NEER    schedule 18.06.2016
comment
ฉันทำสิ่งนี้ก่อนหน้านี้ แต่ฉันจะเพิ่มมันลงใน Dropdownlist ได้อย่างไร? var AllActors = Movie.Where(c =› c.Actors.Any(i =› i.Name.Contains(SearchActor))).SelectMany(u =› u.Actors); var ActorLst = รายการใหม่‹สตริง›(); ActorLst.AddRange(AllActors.Distinct()); และฉันได้รับข้อผิดพลาดในการแปลง - person streamc; 19.06.2016
comment
ลองดู stackoverflow.com/questions/18382311/ @ifooi - person NEER; 19.06.2016
comment
โอเคขอบคุณ. ฉันเปลี่ยนรายชื่อสตริงเป็นรายชื่อนักแสดง และฉันจะอ่าน - person streamc; 19.06.2016
comment
Movie.Where(c =› c.Actors.Any(i =› i.Name.Contains(SearchActor))).SelectMany(i =› i.Actors).Select(i =› ใหม่ { i.Name}) @ ไอฟูอิ - person NEER; 19.06.2016
comment
var AllActors = Movie.Where(c =› c.Actors.Any(i =› i.Name.Contains(SearchActor))).SelectMany(i =› i.Actors).Select(i =› ใหม่ { i.Name }); var ActorLst = รายการใหม่‹สตริง›(); ActorLst.AddRange(AllActors.Distinct()); ไม่สามารถแปลงจาก 'System.Linq.IQueryable‹‹anonymous type: string Name››' เป็น 'System.Collections.Generic.IEnumerable‹string›' ขออภัยเพื่อน และทับค. - person streamc; 19.06.2016
comment
เพียงเปลี่ยน ใหม่ { i.Name} เป็น i.Name @ifooi - person NEER; 19.06.2016
comment
ใช่ มันทำงานถูกต้องและทำไปได้ครึ่งทางแล้ว แต่ฉันต้องคิดให้มากกว่านี้ ด้วย var AllActors = Movie.Where(c =› c.Actors.Any(i =› i.Name.Contains(SearchActor))).SelectMany(i =› i.Actors).Select(i =› i.Name) ; ฉันสามารถแสดงนักแสดงสำหรับนักแสดงที่ได้รับการคัดเลือกเท่านั้น ดีเลย แต่เมื่อฉันเลือกภาพยนตร์ที่การก่อสร้างแสดงผลลัพธ์ของนักแสดงทุกคน แม้ว่าจะไม่ได้มีทั้งหมดในภาพยนตร์ก็ตาม ตามหลักเหตุผลแล้ว ฉันคิดว่าฉันต้องเพิ่ม "Contain" ลงใน var - person streamc; 19.06.2016
comment
และเพิ่มเงื่อนไขตรรกะบางประการ - person streamc; 19.06.2016