Linq Syntax - การเลือกหลายคอลัมน์


98

นี่คือ Linq Syntax ของฉันที่ฉันใช้กับโมเดลเอนทิตีของฉัน

IQueryable<string> objEmployee = null;

objEmployee = from res in _db.EMPLOYEEs
              where (res.EMAIL == givenInfo || res.USER_NAME == givenInfo)
              select res.EMAIL;

ฉันจะเลือกหลายคอลัมน์ได้อย่างไร เช่นฉันต้องการเลือก res.ID เช่นกัน และฉันจะรับสิ่งเหล่านั้นได้อย่างไร? ฉันคิดว่า IQueryable จะไม่ได้ผล และนี่เรียกว่า Linq เป็น SQL - ใช่ไหม?


3
LinqToSql และกรอบงานเอนทิตีแตกต่างกัน ดูstackoverflow.com/questions/8676/…
gideon

คำตอบ:


194

ตามที่คำตอบอื่น ๆ ระบุไว้คุณต้องใช้ประเภทที่ไม่ระบุตัวตน

เท่าที่เกี่ยวข้องกับไวยากรณ์ฉันชอบวิธีการผูกมัดโดยส่วนตัว วิธีการผูกมัดเทียบเท่าจะเป็น: -

var employee = _db.EMPLOYEEs
    .Where(x => x.EMAIL == givenInfo || x.USER_NAME == givenInfo)
    .Select(x => new { x.EMAIL, x.ID });

AFAIK ไวยากรณ์ LINQ ที่ประกาศจะถูกแปลงเป็นห่วงโซ่การเรียกวิธีที่คล้ายกับสิ่งนี้เมื่อมีการคอมไพล์

อัปเดต

หากคุณต้องการวัตถุทั้งหมดคุณก็ต้องละเว้นการเรียกไปSelect()เช่น

var employee = _db.EMPLOYEEs
    .Where(x => x.EMAIL == givenInfo || x.USER_NAME == givenInfo);

72

คุณสามารถใช้ประเภทที่ไม่ระบุตัวตนได้เช่น:

  var empData = from res in _db.EMPLOYEEs
                where res.EMAIL == givenInfo || res.USER_NAME == givenInfo
                select new { res.EMAIL, res.USER_NAME };

คุณสามารถแนะนำวิธีการเขียนนิพจน์นี้ได้อย่างถูกต้อง: เลือกใหม่ {(DateTime.Now - Debt.ClaimDate), Debt.Amount}; เหรอ? เกิดข้อผิดพลาด: ผู้ประกาศสมาชิกประเภทที่ไม่ระบุชื่อไม่ถูกต้อง
Dainius Kreivys

1
@DainiusKreivys select new { Diff = (DateTime.Now - debt.ClaimDate), Amount = debt.Amount}. แบบฟอร์มที่ใช้ในคำตอบคือชวเลขโดยที่ชื่อสมาชิกในนิพจน์การเริ่มต้นใช้เป็นชื่อเขตข้อมูลของชนิดที่ไม่ระบุชื่อ เช่นnew {res.EMAIL, res.USER_NAME}เป็นชวเลขสำหรับnew {EMAIL = res.EMAIL, USER_NAME = res.USER_NAME}. ในกรณีที่มีนิพจน์เช่นเดียวกับในกรณีของคุณที่มีวันที่ - การชวเลขใช้ไม่ได้ดังนั้นข้อผิดพลาดของคอมไพเลอร์
Ivan Danilov

5
 var employee =  (from res in _db.EMPLOYEEs
 where (res.EMAIL == givenInfo || res.USER_NAME == givenInfo)
 select new {res.EMAIL, res.USERNAME} );

หรือคุณสามารถใช้

 var employee =  (from res in _db.EMPLOYEEs
 where (res.EMAIL == givenInfo || res.USER_NAME == givenInfo)
 select new {email=res.EMAIL, username=res.USERNAME} );

คำอธิบาย:

  1. เลือกพนักงานจาก db เป็น res

  2. กรองรายละเอียดพนักงานตามเงื่อนไขที่

  3. เลือกฟิลด์ที่ต้องการจากอ็อบเจ็กต์พนักงานโดยการสร้างอ็อบเจ็กต์ Anonymous โดยใช้ new {}


เพิ่มคำอธิบายในคำตอบ
Sandeep

คุณเข้าถึงคอลัมน์ต่างๆได้อย่างไร
ARidder101
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.