2017-10-09 15 views
0

donné la variable instance suivanteen utilisant l'expression lambda pour définir les fenêtres source de données de zone de liste déroulante C# application de formulaires

 cboBankAccountId.DataSource = db.BankAccounts.Where(x => x.BankAccountId).ToList(); 

laisse supposer que mes noms de table et les propriétés sont toutes correctes ... Quelqu'un peut-il me expliquer pourquoi cette façon d'attribuer une source de données ne fonctionne pas avec une application de formulaire Windows.

Cependant, j'ai vu dans d'autres messages que le suivant (et ce que j'ai utilisé dans mon projet) fonctionne.
Maintenant, est-ce simplement à cause de la façon dont les propriétés d'une zone de liste déroulante sont assignées dans un formulaire Windows par rapport à un formulaire Web?

cboBankAccountId = db.BankAccounts; 
cboBankAccountId.ValueMember = "BankAccountId"; 
cboBankAccountId.DisplayMember = "FullName"; 

merci ... et heureux! Thanksgiving

+1

Où (x => x.BankAccountId), votre ID de compte arrière est un booléen? – user6144226

+0

je vois ici que j'ai besoin d'une valeur à comparer dans mon expression ... – sneufeld

Répondre

0

La source de données d'un contrôle ComboBox peut être une base de données, un service Web ou un objet pouvant être utilisé ultérieurement pour générer des contrôles liés aux données.

Le problème avec votre code est dans votre expression lambda. La méthode d'extension "Où" dans votre cas attend un délégué de type Func<BankAccounts, bool>. c'est-à-dire, vous devez passer un délégué qui prend BankAccounts en entrée et donne bool en tant que sortie qui est utilisée pour filtrer votre résultat.

Donc, si vous vouliez savoir BankAccounts avec un identifiant de 1, votre expression lambda ressemblerait à ceci:

cboBankAccountId.DataSource = db.BankAccounts.Where(x => x.BankAccountId == 1).ToList(); 

Si vous êtes nouveau Lambda Expressions, vous pouvez également traduire comme:

cboBankAccountId.DataSource = db.BankAccounts.Where((BankAccounts x) => 
{ 
    return x.BankAccountId == 1; 
}).ToList(); 

ou la version complète:

public bool Filter(BankAccountId id) 
{ 
    bool filterPassed; 

    if(id == 1) 
     filterPassed = true; 
    else 
     filterPassed = false; 

    return filterPassed; 
} 
cboBankAccountId.DataSource = db.BankAccounts.Where(Filter).ToList(); 

Comme vous pouvez le voir, tout ce que vous devez p ass à la méthode Where est une méthode qui peut être utilisée pour filtrer le résultat. Chaque élément de la liste est ensuite exécuté via cette méthode et seuls ceux qui réussissent le test sont renvoyés. C'est ainsi que fonctionne la méthode d'extension Where dans LINQ.

+1

Je comprends ... désolé j'ai oublié j'ai besoin d'une valeur à comparer dans l'expression ... – sneufeld