|
می خواهم متغیری از نوع ناشناس (anonymous) را به تابعی بفرستم. واقعیت این است که این متغیر حاصل یک پرس و جوی Linq است. اما به روش معمول این کار ممکن نیست:
var result = (from name in PersonsTable
select new { ColumnName = name.ColumnName });
ProcessTheResult(query)
اما اگر تابع ProcessTheResult به این صورت تعریف شود، این تابع قابل استفاده نخواهد بود.
private void ProcessTheResult(var result)
متاسفانه چیزی که شما میخواهید ممکن نیست. مقدار متغیر IEnumerable از یک نوع بی نام است. نام انواع ناشناس در کد کاربر نشان داده نمی شود، از این رو هیچ راهی برای قرار دادن آنها به عنوان ورودی تابع وجود ندارد. بهترین روش این است که یک تایپ ایجاد کنید و خروجی آن را به تابع منتقل کنید. به عنوان مثال:
struct Data {
public string ColumnName;
}
var query = (from name in some.Table
select new Data { ColumnName = name });
MethodOp(query);
...
MethodOp(IEnumerable<Data> enumerable);
هرچند که در این مورد، میتوانید تنها یک فیلد را انتخاب کنید، پس از آن ممکن است که بتوانید فیلدها را آسان تر به طور مستقیم انتخاب کنید. این موجب خواهد شد که پرس و جو به عنوان یک نوع از IEnumerable زمینه اجرا شوند. در این مورد ، نام ستون.
var query = (from name in some.Table select name); // IEnumerable<string>
private void ProcessTheResult(dynamic result)ok