Le fait de déclarer un vide Queryable?
Comment dois-je déclarer une variable?
var rData = from nc in ctx.NEWSLETTER_CLIENTS
join ni in ctx.NEWSLETTER_INDICES on nc.INDEX_NUM
equals ni.INDEX_NUM
select new
{
ClientID = nc.CLIENT_ID,
Email = nc.CLIENT_EMAIL_ADDRESS,
Index = nc.INDEX_NUM,
MainClass = ni.MAIN_CLASS,
SubClass = ni.SUB_CLASS,
App1 = ni.VALUE_1,
App2 = ni.VALUE_2,
App3 = ni.VALUE_3,
App4 = ni.VALUE_4
};
//Now I need to declare on a variable named fData under the function scope,
//so I can later use it:
var fData = ...; //What do I declare here?
if(x)
fData = fData.Concat(rData.Where(u => ...));
if(y)
fData = fData.Concat(rData.Where(u => ...));
//etc
OriginalL'auteur Shai | 2012-06-07
Vous devez vous connecter pour publier un commentaire.
Si vous souhaitez utiliser la requête ultérieurement (oie après la fi):
Mise à jour:
Maintenant pour l'utilisation avec les types anonymes:
Mise à jour 2:
Comme l'a souligné, le ci-dessus ne fait pas le travail, comme le prédicat de
Where
ne connaissez pas le type. Vous pourriez refactoriser un peu plus d'inclure les prédicats dans les paramètres, par exemple:Mise à jour 3: (peut-être hacky)
Pour les types anonymes, n'est pas facilement possible, mais peut en fait en partie par un peu de refactoring du reste de la méthode.
J'ai ajouté un exemple de ce que je voulais dire dans mon commentaire précédent.
merci mais ça ne compile pas, comme
RestOfMethod
ne sais pas laquelle les membresu
contient...Vous avez raison, et à refactoriser plus, sera en désordre 🙁
OriginalL'auteur leppie
Bien, la solution suivante peut être mauvais (et même contenir certains indésirables généraux), mais, il travaille:
OriginalL'auteur Shai
Vous pouvez le déclarer comme un IQueryable au lieu d'un var. La raison pour laquelle vous ne pouvez pas déclarer fData comme un var est parce que "var" besoins de déduire le type au cours de déclaration. Si vous connaissez le type à l'avance, vous pouvez le déclarer juste fine.
Encore mieux, si vous connaissez le type de p, vous pouvez faire fortement typé avec la forme générique de la IQueryable:
Notez que cela affecte null! Si vous essayez de l'utiliser, vous obtiendrez une référence nulle exception. Si vous voulez vraiment un vide Queryable objet, puis utilisez leppie de la suggestion, et de créer un vide de la collection à l'aide de la Énumérable.Empty().AsQueryable() la méthode de la chaîne.
p
à l'objet.Vous n'avez pas besoin de cast p de l'objet; tout est .NET est implicitement convertible objet.
Il pourrait travailler .NET 4 en raison de la covariance, mais il va certainement échouer .NET 3.5.
OriginalL'auteur BTownTKD