Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Передача переменной var из одной в другую процедуру / 24 сообщений из 24, страница 1 из 1
19.03.2009, 07:45
    #35878182
Konstantin Bykov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача переменной var из одной в другую процедуру
В одной из процедур класса вот такая переменная:

var shipping =
from sh in shipping_
select new
{
catalog = sh.catalog,
cost = sh.cost,
shipping_UPS_1 = sh.shipping_UPS_1,
shipping_UPS_2 = sh.shipping_UPS_2,
shipping_UPS_3 = sh.shipping_UPS_3,
shipping_track = sh.shipping_track,
ship_by_track = sh.ship_by_track,
ship_by_UPS = sh.ship_by_UPS,
hazmat_ground = sh.hazmat_ground,
hazmat_ground_add = sh.hazmat_ground_add,
hazmat_truck = sh.hazmat_truck,
hazmat_truck_add = sh.hazmat_truck_add,
cost_after_shipping = sh.cost
+ sh.shipping_UPS_1 * sh.ship_by_UPS
+ sh.shipping_UPS_2 * sh.ship_by_UPS
+ sh.shipping_UPS_3 * sh.ship_by_UPS
+ sh.shipping_track * sh.ship_by_track
+ sh.hazmat_ground_add * sh.hazmat_ground
+ sh.hazmat_truck_add * sh.hazmat_truck
};

Как мне её, несчастную, передать в другую процедуру для дальнейшей обработки. Вариант такого рода как void SomeProcedure(var a) не прокатывает, т.к. надо чётко указать тип переменной. Где его взять, не сильно напрягая мозг в вычислении получившегося типа?
...
Рейтинг: 0 / 0
19.03.2009, 08:59
    #35878249
Compositum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача переменной var из одной в другую процедуру
Konstantin BykovВ одной из процедур класса вот такая переменная:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
var shipping =
                from sh in shipping_
                select new
                {
                    catalog = sh.catalog,
                    cost = sh.cost,
                    shipping_UPS_1 = sh.shipping_UPS_1,
                    shipping_UPS_2 = sh.shipping_UPS_2,
                    shipping_UPS_3 = sh.shipping_UPS_3,
                    shipping_track = sh.shipping_track,
                    ship_by_track = sh.ship_by_track,
                    ship_by_UPS = sh.ship_by_UPS,
                    hazmat_ground = sh.hazmat_ground,
                    hazmat_ground_add = sh.hazmat_ground_add,
                    hazmat_truck = sh.hazmat_truck,
                    hazmat_truck_add = sh.hazmat_truck_add,
                    cost_after_shipping = sh.cost 
                        + sh.shipping_UPS_1 * sh.ship_by_UPS
                        + sh.shipping_UPS_2 * sh.ship_by_UPS
                        + sh.shipping_UPS_3 * sh.ship_by_UPS
                        + sh.shipping_track * sh.ship_by_track
                        + sh.hazmat_ground_add * sh.hazmat_ground
                        + sh.hazmat_truck_add * sh.hazmat_truck
                };

Как мне её, несчастную, передать в другую процедуру для дальнейшей обработки. Вариант такого рода как void SomeProcedure(var a) не прокатывает, т.к. надо чётко указать тип переменной. Где его взять, не сильно напрягая мозг в вычислении получившегося типа?
а какой смысл в SomeProcedure(var a)? Как компилятор узнает, что это за void? вы же наверняка захотите использовать что-то типа a.НекоеСвойство...
если вы хотите реализовать сие в LINQ - то тут проблем никаких не возникнет.
...
Рейтинг: 0 / 0
19.03.2009, 09:36
    #35878304
Konstantin Bykov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача переменной var из одной в другую процедуру
Compositum
а какой смысл в SomeProcedure(var a)? Как компилятор узнает, что это за void? вы же наверняка захотите использовать что-то типа a.НекоеСвойство...
если вы хотите реализовать сие в LINQ - то тут проблем никаких не возникнет.

Не void а var.
SomeProcedure(var a) это та процедура где я дальше хочу что-то сделать.
И фразу "если вы хотите реализовать сие в LINQ - то тут проблем никаких не возникнет" я вообще не понял... Я вроде в LINQ и пытаюсь сделать это.... Просто в роцедуре, где , эта переменная родилась настал момент ветвления. я вот и хочу раскидать дальнейшие действия по отдельным процедурам
Мож я непонятно вопрос поставил?
...
Рейтинг: 0 / 0
19.03.2009, 09:44
    #35878324
Compositum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача переменной var из одной в другую процедуру
Konstantin Bykov
Не void а var.
да, это я оговорился. =)

Konstantin Bykov
И фразу "если вы хотите реализовать сие в LINQ - то тут проблем никаких не возникнет" я вообще не понял... Я вроде в LINQ и пытаюсь сделать это.... Просто в роцедуре, где , эта переменная родилась настал момент ветвления. я вот и хочу раскидать дальнейшие действия по отдельным процедурам
Мож я непонятно вопрос поставил?
тогда всё должно быть просто. Для начала покажите свой LINQ-код =)
...
Рейтинг: 0 / 0
19.03.2009, 10:05
    #35878384
Konstantin Bykov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача переменной var из одной в другую процедуру
Compositum,

Он во вложении... надо из процедуры ClearComputeData передать объект net_v_iprod в процедуру SaveNewProds
...
Рейтинг: 0 / 0
19.03.2009, 10:07
    #35878392
Compositum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача переменной var из одной в другую процедуру
Konstantin BykovCompositum,

Он во вложении... надо из процедуры ClearComputeData передать объект net_v_iprod в процедуру SaveNewProds
я не буду качать, вы просто покажите код здесь, на форуме.
...
Рейтинг: 0 / 0
19.03.2009, 10:07
    #35878393
Konstantin Bykov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача переменной var из одной в другую процедуру
Compositum,

ЗЫ: Если сделать так как я сделал
private void SaveNewProds(object net_v_iprod)
{
throw new NotImplementedException();
}

теряется структура. А мне этого не надо
...
Рейтинг: 0 / 0
19.03.2009, 10:38
    #35878479
Konstantin Bykov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача переменной var из одной в другую процедуру
Compositum,

private void ClearComputeData(DataSet dset, string fname)
{
//print tables state
LogWriter.pr("Tables:");
foreach (DataTable table in dset.Tables)
{
LogWriter.pr("================================");
LogWriter.pr("table: " + table.TableName + "; RowCount: " + table.Rows.Count.ToString());
LogWriter.pr("Table structure:");
foreach (DataColumn col in table.Columns)
{
LogWriter.pr("\t" + col.ColumnName + "\t" + col.DataType.ToString());
}
LogWriter.pr("================================");
}
//clearing data
DataTable Catalog_Truserv_Item = dset.Tables["Catalog_Truserv_Item"];
DataTable Inventory_Truserv_Item = dset.Tables["Inventory_Truserv_Item"];
IEnumerable<DataRow> Inventory =
from a in Inventory_Truserv_Item.AsEnumerable()
select a;
IEnumerable<DataRow> Catalog =
from b in Catalog_Truserv_Item.AsEnumerable()
select b;
IEnumerable<System.Linq.IGrouping<string, System.Data.DataRow>> InventoryGroup =
Inventory.GroupBy(d => d.Field<string>("item_nbr")).Where(a => a.Count() < 4);
var CatalogLt4 =
from catalog in Catalog
join inventory in InventoryGroup
on catalog.Field<string>("item_nbr") equals inventory.Key into co
from inventory in co.DefaultIfEmpty()
select new
{
catalog = catalog,
inventory = inventory
};
LogWriter.pr("CatalogLt4 count: " + CatalogLt4.Count().ToString());
var clearAll = CatalogLt4.Where(c =>
!c.catalog.Field<string>("vendor_name").Contains("TRUE VALUE") &&
!c.catalog.Field<string>("retail_uom").Equals("DSP") &&
!c.catalog.Field<string>("dpt_code").Equals("Z ") &&
!c.catalog.Field<string>("Exclusive_Brand_Code").Equals("TV") &&
!c.catalog.Field<string>("Exclusive_Brand_Code").Equals("TS") &&
Convert.ToDouble(c.catalog.Field<string>("srp_cost")) > 0 &&
c.inventory == null
);
LogWriter.pr("clearAll count: " + clearAll.Count().ToString());
//add Hazmat
DataTable HazmatTable = dset.Tables["Hazmat"];
IEnumerable<DataRow> Hazmat =
from a in HazmatTable.AsEnumerable()
select a;
var catalog_hazmat =
from ship in clearAll
join haz in Hazmat
on ship.catalog.Field<string>("item_nbr") equals haz.Field<string>("field 1").Substring(4, 6) into hz
from haz in hz.DefaultIfEmpty()
select new
{
catalog = ship,
hazmat = haz,
is_hazmat = haz == null ? false : true,
is_pack_type_f = ship.catalog.Field<string>("member_pack_type") == "F" ? true : false
};
LogWriter.pr("catalog_hazmat count: " + catalog_hazmat.Count().ToString());
//shipping calculation
var pre_ship =
from sh in catalog_hazmat
select new
{
catalog = sh.catalog.catalog,
hazmat = sh.hazmat,
cost = sh.is_hazmat || sh.is_pack_type_f ?
Convert.ToDouble(sh.catalog.catalog.Field<string>("member_cost"))
* Convert.ToDouble(sh.catalog.catalog.Field<string>("member_pack_qty"))
: Convert.ToDouble(sh.catalog.catalog.Field<string>("member_cost")),
weight = sh.is_hazmat || sh.is_pack_type_f ?
Convert.ToDouble(sh.catalog.catalog.Field<string>("pack_weight"))
: Convert.ToDouble(sh.catalog.catalog.Field<string>("weight")),
length = sh.is_hazmat || sh.is_pack_type_f ?
Convert.ToDouble(sh.catalog.catalog.Field<string>("pack_length"))
: Convert.ToDouble(sh.catalog.catalog.Field<string>("length")),
width = sh.is_hazmat || sh.is_pack_type_f ?
Convert.ToDouble(sh.catalog.catalog.Field<string>("pack_width"))
: Convert.ToDouble(sh.catalog.catalog.Field<string>("width")),
height = sh.is_hazmat || sh.is_pack_type_f ?
Convert.ToDouble(sh.catalog.catalog.Field<string>("pack_height"))
: Convert.ToDouble(sh.catalog.catalog.Field<string>("height"))
};
var shipping_ =
from sh in pre_ship
select new
{
catalog = sh.catalog,
cost = sh.cost,
shipping_UPS_1 = (double)(sh.weight <= 70 ? 5 + 0.72 * sh.weight : 0),
shipping_UPS_2 = (double)(sh.weight > 70 && sh.weight < 100 ? 5 + 0.72 * 70 + 1 * (sh.weight - 70) : 0),
shipping_UPS_3 = (double)(sh.weight >= 100 ? 5 + 0.72 * 70 + 1 * 30 + 1.2 * (sh.weight - 100) : 0),
shipping_track = 89 + 1.2 * sh.weight,
ship_by_track = (double)(sh.weight > 75 || sh.length > 42 || sh.width > 42 || sh.height > 42 ? 1 : 0),
ship_by_UPS = (double)(sh.weight > 75 || sh.length > 42 || sh.width > 42 || sh.height > 42 ? 0 : 1),
hazmat_ground = (double)(sh.hazmat == null ? 0 : sh.hazmat.Field<string>("field 2") == "0000" ? 1 : 0),
hazmat_ground_add = (double)70,
hazmat_truck = (double)(sh.hazmat == null ? 0 : sh.hazmat.Field<string>("field 2") != "0000" ? 1 : 0),
hazmat_truck_add = (double)0
};
var shipping =
from sh in shipping_
select new
{
catalog = sh.catalog,
cost = sh.cost,
shipping_UPS_1 = sh.shipping_UPS_1,
shipping_UPS_2 = sh.shipping_UPS_2,
shipping_UPS_3 = sh.shipping_UPS_3,
shipping_track = sh.shipping_track,
ship_by_track = sh.ship_by_track,
ship_by_UPS = sh.ship_by_UPS,
hazmat_ground = sh.hazmat_ground,
hazmat_ground_add = sh.hazmat_ground_add,
hazmat_truck = sh.hazmat_truck,
hazmat_truck_add = sh.hazmat_truck_add,
cost_after_shipping = sh.cost
+ sh.shipping_UPS_1 * sh.ship_by_UPS
+ sh.shipping_UPS_2 * sh.ship_by_UPS
+ sh.shipping_UPS_3 * sh.ship_by_UPS
+ sh.shipping_track * sh.ship_by_track
+ sh.hazmat_ground_add * sh.hazmat_ground
+ sh.hazmat_truck_add * sh.hazmat_truck
};
LogWriter.pr("shipping count: " + shipping.Count().ToString());
//saving data to output file
if (shipping.Count() != 0)
{
string s = "";
string TXTfile = fname;
StreamWriter sw = new StreamWriter(TXTfile, false, Encoding.GetEncoding("cp866"));
//write head
s += ("item_nbr") + "\t";
s += ("srp_cost") + "\t";
s += ("member_cost") + "\t";
s += ("short_description") + "\t";
s += ("vendor_id") + "\t";
s += ("dpt_code") + "\t";
s += ("class_code") + "\t";
s += ("subclass_code") + "\t";
s += ("vendor_name") + "\t";
s += ("upc") + "\t";
s += ("long_description") + "\t";
s += ("weight") + "\t";
s += ("length") + "\t";
s += ("width") + "\t";
s += ("height") + "\t";
s += ("pack_weight") + "\t";
s += ("pack_length") + "\t";
s += ("pack_width") + "\t";
s += ("pack_height") + "\t";
s += ("retail_pack_qty") + "\t";
s += ("member_pack_qty") + "\t";
s += ("member_pack_type") + "\t";
s += ("member_break_pack") + "\t";
s += ("model") + "\t";
s += ("item_picture_id") + "\t";
s += ("country_code") + "\t";
s += ("to_be_discontinued") + "\t";
s += ("retail_uom") + "\t";
s += ("Edit_Divisor") + "\t";
s += ("Exclusive_Brand_Code") + "\t";
s += ("ds_cost") + "\t";
s += ("substitute_item_nbr") + "\t";
s += "shipping_UPS_1" + "\t";
s += "shipping_UPS_2" + "\t";
s += "shipping_UPS_3" + "\t";
s += "shipping_track" + "\t";
s += "ship_by_track" + "\t";
s += "ship_by_UPS" + "\t";
s += "cost" + "\t";
s += "hazmat_ground" + "\t";
s += "hazmat_ground_add" + "\t";
s += "hazmat_track" + "\t";
s += "hazmat_track_add" + "\t";
s += "cost_after_shipping";
sw.WriteLine(s);
//write body
foreach (var row in shipping)
{
s = "";
s += row.catalog.Field<string>("item_nbr") + "\t";
s += row.catalog.Field<string>("srp_cost") + "\t";
s += row.catalog.Field<string>("member_cost") + "\t";
s += row.catalog.Field<string>("short_description") + "\t";
s += row.catalog.Field<string>("vendor_id") + "\t";
s += row.catalog.Field<string>("dpt_code") + "\t";
s += row.catalog.Field<string>("class_code") + "\t";
s += row.catalog.Field<string>("subclass_code") + "\t";
s += row.catalog.Field<string>("vendor_name") + "\t";
s += row.catalog.Field<string>("upc") + "\t";
s += row.catalog.Field<string>("long_description") + "\t";
s += row.catalog.Field<string>("weight") + "\t";
s += row.catalog.Field<string>("length") + "\t";
s += row.catalog.Field<string>("width") + "\t";
s += row.catalog.Field<string>("height") + "\t";
s += row.catalog.Field<string>("pack_weight") + "\t";
s += row.catalog.Field<string>("pack_length") + "\t";
s += row.catalog.Field<string>("pack_width") + "\t";
s += row.catalog.Field<string>("pack_height") + "\t";
s += row.catalog.Field<string>("retail_pack_qty") + "\t";
s += row.catalog.Field<string>("member_pack_qty") + "\t";
s += row.catalog.Field<string>("member_pack_type") + "\t";
s += row.catalog.Field<string>("member_break_pack") + "\t";
s += row.catalog.Field<string>("model") + "\t";
s += row.catalog.Field<string>("item_picture_id") + "\t";
s += row.catalog.Field<string>("country_code") + "\t";
s += row.catalog.Field<string>("to_be_discontinued") + "\t";
s += row.catalog.Field<string>("retail_uom") + "\t";
s += row.catalog.Field<string>("Edit_Divisor") + "\t";
s += row.catalog.Field<string>("Exclusive_Brand_Code") + "\t";
s += row.catalog.Field<string>("ds_cost") + "\t";
s += row.catalog.Field<string>("substitute_item_nbr") + "\t";
s += row.shipping_UPS_1.ToString() + "\t";
s += row.shipping_UPS_2.ToString() + "\t";
s += row.shipping_UPS_3.ToString() + "\t";
s += row.shipping_track.ToString() + "\t";
s += row.ship_by_track.ToString() + "\t";
s += row.ship_by_UPS.ToString() + "\t";
s += row.cost.ToString() + "\t";
s += row.hazmat_ground.ToString() + "\t";
s += row.hazmat_ground_add.ToString() + "\t";
s += row.hazmat_truck.ToString() + "\t";
s += row.hazmat_truck_add.ToString() + "\t";
s += row.cost_after_shipping.ToString();
sw.WriteLine(s);
}
sw.Close();
//new products (te kotorih net v IPROD)
var iprod =
from a in dset.Tables["iprod"].AsEnumerable()
select new
{
pn = a.Field<string>("field 2"),
manuf_name = a.Field<string>("field 3"),
vendor_pn = a.Field<string>("field 5"),
};
//var CatalogLt4 =
// from catalog in Catalog
// join inventory in InventoryGroup
// on catalog.Field<string>("item_nbr") equals inventory.Key into co
// from inventory in co.DefaultIfEmpty()
// select new
// {
// catalog = catalog,
// inventory = inventory
// };
var net_v_iprod =
from ni in shipping
join ip in iprod
on ni.catalog.Field<string>("item_nbr") equals ip.vendor_pn into j
from ip in j.DefaultIfEmpty()
where ip == null
select new
{
shipping = ni,
};
SaveNewProds(net_v_iprod);
LogWriter.pr("net_v_iprod count: " + net_v_iprod.Count().ToString());
}
}

private void SaveNewProds(object net_v_iprod)
{
throw new NotImplementedException();
}



Сорри, что так длинно - проблема на лицо: я не знаю как переменные var куда-то передать
...
Рейтинг: 0 / 0
19.03.2009, 11:08
    #35878585
Compositum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача переменной var из одной в другую процедуру
Konstantin Bykov,

много лишнего кода. никогда не выкладывайте такой объем - его все равно не будут читать. выложите только код самого LINQ-запроса . И оформляйте сообщение правильно (с тэгами) дабы читаемо было.
...
Рейтинг: 0 / 0
19.03.2009, 11:28
    #35878655
Konstantin Bykov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача переменной var из одной в другую процедуру
Compositum,

попробую упростить:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
        private void ClearComputeData(DataSet dset, string fname)
        {
            //....какой-то код....
            var shipping =
                from sh in shipping_
                select new
                {
                    catalog = sh.catalog,
                    cost = sh.cost,
                    shipping_UPS_1 = sh.shipping_UPS_1,
                    shipping_UPS_2 = sh.shipping_UPS_2,
                    shipping_UPS_3 = sh.shipping_UPS_3,
                    shipping_track = sh.shipping_track,
                    ship_by_track = sh.ship_by_track,
                    ship_by_UPS = sh.ship_by_UPS,
                    hazmat_ground = sh.hazmat_ground,
                    hazmat_ground_add = sh.hazmat_ground_add,
                    hazmat_truck = sh.hazmat_truck,
                    hazmat_truck_add = sh.hazmat_truck_add,
                    cost_after_shipping = sh.cost 
                        + sh.shipping_UPS_1 * sh.ship_by_UPS
                        + sh.shipping_UPS_2 * sh.ship_by_UPS
                        + sh.shipping_UPS_3 * sh.ship_by_UPS
                        + sh.shipping_track * sh.ship_by_track
                        + sh.hazmat_ground_add * sh.hazmat_ground
                        + sh.hazmat_truck_add * sh.hazmat_truck
                };
                SaveNewProds(shipping);
        }

        private void SaveNewProds(object net_v_iprod)
        {
            throw new NotImplementedException();
        }
Вот теперь более читаемо.
Дак вот, в процедуре SaveNewProds(object net_v_iprod) я теряю структуру
Как не терять?
...
Рейтинг: 0 / 0
19.03.2009, 11:32
    #35878673
зы
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача переменной var из одной в другую процедуру
никак, только если завести описание того класса, который создается в результате запроса, анонимные типы нельзя выносить за пределы того места, где они были созданы. var на самом деле не "какой-то тип", он заменяется реальным типом на этапе компиляции.
...
Рейтинг: 0 / 0
19.03.2009, 11:34
    #35878684
Konstantin Bykov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача переменной var из одной в другую процедуру
зы,

как узнать этот тип на этапе разработки? может куда какую кнопочку нажать в VS Express и получить получившийся тип?
...
Рейтинг: 0 / 0
19.03.2009, 11:39
    #35878697
Compositum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача переменной var из одной в другую процедуру
Konstantin Bykov,

имхо в этом случае нужно использовать лямбда-выражения в составе этого же LINQ-запроса. тогда получите нужный вам доступ к свойствам
...
Рейтинг: 0 / 0
19.03.2009, 11:46
    #35878722
Konstantin Bykov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача переменной var из одной в другую процедуру
CompositumKonstantin Bykov,

имхо в этом случае нужно использовать лямбда-выражения в составе этого же LINQ-запроса. тогда получите нужный вам доступ к свойствам

А как? Поподробней, плз., можно на моём примере?
...
Рейтинг: 0 / 0
19.03.2009, 11:51
    #35878738
Compositum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача переменной var из одной в другую процедуру
Konstantin BykovCompositumKonstantin Bykov,

имхо в этом случае нужно использовать лямбда-выражения в составе этого же LINQ-запроса. тогда получите нужный вам доступ к свойствам

А как? Поподробней, плз., можно на моём примере?
можно, только вы покажите нормальный код вашего метода, вместо этого:
Код: plaintext
1.
2.
3.
4.
private void SaveNewProds(object net_v_iprod)
        {
            throw new NotImplementedException();
        }
...
Рейтинг: 0 / 0
19.03.2009, 12:02
    #35878790
Konstantin Bykov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача переменной var из одной в другую процедуру
CompositumKonstantin BykovCompositumKonstantin Bykov,

имхо в этом случае нужно использовать лямбда-выражения в составе этого же LINQ-запроса. тогда получите нужный вам доступ к свойствам

А как? Поподробней, плз., можно на моём примере?
можно, только вы покажите нормальный код вашего метода, вместо этого:
Код: plaintext
1.
2.
3.
4.
private void SaveNewProds(object net_v_iprod)
        {
            throw new NotImplementedException();
        }


Вот, попытаемся:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
private void ClearComputeData(DataSet dset, string fname)
        {
            //....какой-то код....
            var shipping =
                from sh in shipping_
                select new
                {
                    catalog = sh.catalog,
                    cost = sh.cost,
                    shipping_UPS_1 = sh.shipping_UPS_1,
                    shipping_UPS_2 = sh.shipping_UPS_2,
                    shipping_UPS_3 = sh.shipping_UPS_3,
                    shipping_track = sh.shipping_track,
                    ship_by_track = sh.ship_by_track,
                    ship_by_UPS = sh.ship_by_UPS,
                    hazmat_ground = sh.hazmat_ground,
                    hazmat_ground_add = sh.hazmat_ground_add,
                    hazmat_truck = sh.hazmat_truck,
                    hazmat_truck_add = sh.hazmat_truck_add,
                    cost_after_shipping = sh.cost 
                        + sh.shipping_UPS_1 * sh.ship_by_UPS
                        + sh.shipping_UPS_2 * sh.ship_by_UPS
                        + sh.shipping_UPS_3 * sh.ship_by_UPS
                        + sh.shipping_track * sh.ship_by_track
                        + sh.hazmat_ground_add * sh.hazmat_ground
                        + sh.hazmat_truck_add * sh.hazmat_truck
                };
                SaveNewProds(shipping);
        }

        private void SaveNewProds(object net_v_iprod)
        {
            if (net_v_iprod.Count() != 0)//output to file
            {
                s = "";
                string TXTfile = new_products;
                StreamWriter sw = new StreamWriter(TXTfile, false, Encoding.GetEncoding("cp866"));
                //write head
                s += ("item_nbr") + "\t";
                s += ("srp_cost") + "\t";
                //...... и 38 столбиков ещё...
                sw.WriteLine(s);
                //write body
                foreach (var row in net_v_iprod)
                {
                    s = "";
                    s += row.shipping.catalog.Field<string>("item_nbr") + "\t";
                    s += row.shipping.catalog.Field<string>("srp_cost") + "\t";
                    //...... и 38 столбиков ещё...
                    sw.WriteLine(s);
                }
                sw.Close();
             }
        }

НО! это так не работает. это так хочется сделать, но не знается как без бы попроще...
...
Рейтинг: 0 / 0
19.03.2009, 12:34
    #35878899
Compositum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача переменной var из одной в другую процедуру
да, тело метода не маленькое, тут лямбду не удобно применять. в такой ситуации проще создать конкретный класс и упаковывать данные не в анонимный тип, а в экземпляр этого самого класса.
...
Рейтинг: 0 / 0
19.03.2009, 13:17
    #35879058
Konstantin Bykov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача переменной var из одной в другую процедуру
Compositumда, тело метода не маленькое, тут лямбду не удобно применять. в такой ситуации проще создать конкретный класс и упаковывать данные не в анонимный тип, а в экземпляр этого самого класса.

По ходу так и придётся делать. Как бы вот только его получить "на автомате" в VS Express. Чтоб руками не конструировать. Ведь как-то ж его тип появляется во всплывающей подсказке. Т.е. студия его уже определила и знает. Как его вывести на экран или в буфер обмена чтоли....
...
Рейтинг: 0 / 0
19.03.2009, 14:47
    #35879387
зы
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача переменной var из одной в другую процедуру
Композиум, браво, только с 10-ого раза смог вникнуть в суть проблемы и родить дубликат моего ответа :)

Автор, как маленький, берешь что написал
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
                select new
                {
                    catalog = sh.catalog,
                    cost = sh.cost,
                    shipping_UPS_1 = sh.shipping_UPS_1,
                    shipping_UPS_2 = sh.shipping_UPS_2,
                    shipping_UPS_3 = sh.shipping_UPS_3,
                    shipping_track = sh.shipping_track,
                    ship_by_track = sh.ship_by_track,
                    ship_by_UPS = sh.ship_by_UPS,
                    hazmat_ground = sh.hazmat_ground,
                    hazmat_ground_add = sh.hazmat_ground_add,
                    hazmat_truck = sh.hazmat_truck,
                    hazmat_truck_add = sh.hazmat_truck_add,
                    cost_after_shipping = sh.cost 
                        + sh.shipping_UPS_1 * sh.ship_by_UPS
                        + sh.shipping_UPS_2 * sh.ship_by_UPS
                        + sh.shipping_UPS_3 * sh.ship_by_UPS
                        + sh.shipping_track * sh.ship_by_track
                        + sh.hazmat_ground_add * sh.hazmat_ground
                        + sh.hazmat_truck_add * sh.hazmat_truck
                };
                
удаляешь что не нужно, приписываешь имя, добавляешь типы данных и {get;set;} на конце, получаешь готовый класс:

Код: plaintext
1.
2.
3.
4.
5.
6.
                class MyGovnoClass
                {
                    public string catalog {get;set};
                    public double cost {get;set;}
                    public string shipping_UPS_1 {get;set;}
                    ... bla bla bla ...
                };
...
Рейтинг: 0 / 0
19.03.2009, 15:02
    #35879443
Konstantin Bykov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача переменной var из одной в другую процедуру
зы,

ага, только вот sh.catalog, sh.cost такие же var....
VS Express показывает его тип в виде new {bla,bla,bla} во всплывающей подсказке. Т.е. студия его уже определила и знает. Как его вывести на экран или в буфер обмена чтоли....
...
Рейтинг: 0 / 0
19.03.2009, 16:09
    #35879689
зы
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача переменной var из одной в другую процедуру
Определения всех остальных классов ты тоже уже написал, в чем проблема? Если тебе лень писать, то научись думать, лень - двигатель рефакторинга.
...
Рейтинг: 0 / 0
19.03.2009, 18:35
    #35880188
gp
gp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача переменной var из одной в другую процедуру
Простите, но еще раз про использование Resharper:

было:
Код: plaintext
1.
2.
3.
private void TestAnonimousToNamedTypeRefactoring()
    	{
    		var q = from i in new[] {"a"} select new {i};
    	}

выделяем "new {i}"
Правая кнопка / Refactor / Convert / Anonimous to named type

стало:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
public class AnonymousClass
    	{
    		public string i { get; set; }
    	}

    	private void TestAnonimousToNamedTypeRefactoring()
    	{
    		var q = from i in new[] {"a"} select new AnonymousClass {i = i};
    	}

или даже:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
public class AnonymousClass
    	{
    		private readonly string _i;

    		public string i
    		{
    			get { return _i; }
    		}

    		public AnonymousClass(string i)
    		{
    			_i = i;
    		}

    		public override string ToString()
    		{
    			var builder = new StringBuilder();
    			builder.Append("{ i = ");
    			builder.Append(i);
    			builder.Append(" }");
    			return builder.ToString();
    		}

    		public override bool Equals(object value)
    		{
    			var type = value as AnonymousClass;
    			return (type != null) && EqualityComparer<string>.Default.Equals(type.i, i);
    		}

    		public override int GetHashCode()
    		{
    			int num = 0x7a2f0b42;
    			return (-1521134295*num) + EqualityComparer<string>.Default.GetHashCode(i);
    		}
    	}

    	private void TestAnonimousToNamedTypeRefactoring()
    	{
    		var q = from i in new[] {"a"} select new AnonymousClass(i);
    	}

нет дурацких вопросов, есть дурацкие ответы
...
Рейтинг: 0 / 0
20.03.2009, 06:01
    #35880701
Konstantin Bykov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача переменной var из одной в другую процедуру
Всё. Всем спасибо. Понял что нет таблетки. Закрываем тему (только как не знаю).
...
Рейтинг: 0 / 0
20.03.2009, 11:54
    #35881288
тихая гавань
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача переменной var из одной в другую процедуру
Konstantin BykovВсё. Всем спасибо. Понял что нет таблетки. Закрываем тему (только как не знаю).
При выходе за скобки var теряется, мс рекомендует пользоваться реальными типами
что бы приблизить var к фунциональному типу, ждем отних индексаторов
Жуть....
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Передача переменной var из одной в другую процедуру / 24 сообщений из 24, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]