2016-04-07 22 views
1

Linq Sorgusu Enum Durum eklemek istediğiniz kodudur AşağıdaEnum Durumu

public partial class AuditTable 
    { 
     public int ID { get; set; } 
     public int CompanyId { get; set; } 
     public int KeyFieldID { get; set; } 
     public System.DateTime DateTimeStamp { get; set; } 
     public EntityType DataModel { get; set; } 
     public string ValueBefore { get; set; } 
     public string ValueAfter { get; set; } 
     public string Changes { get; set; } 
     public AuditActionType AuditActionTypeENUM { get; set; } 

     public int EmployeeId { get; set; } 
     public string EmployeeCode { get; set; } 
     public string Remarks { get; set; } 
     public string IPAddress { get; set; } 
     public string UserName { get; set; } 
    } 
public enum AuditActionType 
    { 
     All = 1, 
     Create, 
     Update, 
     Delete 
    } 

    public enum EntityType 
    { 
     All = 1, 
     BasicDetails, 
     EmployeeDetails, 
     PersonalDetails     
    } 

:

Web Screen

Veri Modeli görüntülenebilir İyi çalışıyor ama aynı sorguyu 4 kez tekrarlamak zorunda kaldı. Aşağıdaki sorguyu bir

cevap

4

ile birleştirmek istiyorum. Where() ifadelerini kullanabilirsiniz.

var baseQuery = ent.tblAuditTable.Where(s => s.KeyFieldID == ID && s.EmployeeCode.Contains(code) && s.UserName.Contains(username)); 

var realQuery = baseQuery; 

if (eType != EntityType.All){ 
    realQuery = realQuery.Where(s=>s.DataModel == eType); 
} 

if (aType != EntityType.All){ 
    realQuery = realQuery.Where(x=>s.AuditActionTypeENUM == aType); 
} 

var result = realQuery.OrderByDescending(s => s.DateTimeStamp).ToList() 

AuditTrail = result; 
1

Hepsi birlikte bir sorguda mı? Bunun gibi

:

bool eTypeIsAll = eType == EntityType.All; 
bool aTypeIsAll = aType == AuditActionType.All; 
AuditTrail = 
    ent.tblAuditTable 
     .Where(s => s.KeyFieldID == ID 
        && (
         eTypeIsAll ? (
          (
           !aTypeIsAll ? 
            s.AuditActionTypeENUM == aType 
            : true 
          ) 

         ) 
         : (
          (
           !aTypeIsAll ? 
            s.AuditActionTypeENUM == aType 
            : true 
          ) 
          && s.DataModel == eType 

         ) 

        ) 
        && s.EmployeeCode.Contains(code) 
        && s.UserName.Contains(username)) 
     .OrderByDescending(s => s.DateTimeStamp) 
     .ToList(); 

Şahsen ben bu şekilde tercih ediyorum. Ancak birçok kişi, @Jehof yönteminin daha okunabilir olduğunu söylüyor.

+0

başka yolu sadece daha okunabilir değil, aynı zamanda (şimdiki sorgu sağlayıcılarla) daha iyi SQL sorguları oluşturur (Sorgu şimdi çalıştırır). –

+0

Aynı şeyi öğrendim, ama oyunumda birkaç farklı yaklaşımı test ettim ve sorgudan sorguya sadece 5-10ms arasında büyük bir fark bulamadım ... Ve SQL sorgusunu kendiniz okumazsınız çünkü Gerçekten önemli değil. –

+0

Kişisel tercihim hakkında daha fazla düşünüyorum –

0

IQueryables ile çalışmalısınız. Sorgunuzu tek bir satırda yazmanıza gerek yoktur. Birden çok alt sorguda yayınlayabilirsiniz.

var queryAble= ent.tblAuditTbale.where(s=>s.KeyFieldId ==Id); 

if(eType !=EntityType.All) 
queryAble = queryAble.where(s=> s.DataModel==eTYpe); 

If(aType!= AuditActionType.All)  
queryAble = queryAble.where(s=> s.AuditActionTypeENUM == aType); 

Finnally

AuditTrail = queryAble.ToList();