Login Login
MORE

WIDGETS

Widgets

Wanted articles
Who is online?
Article tools

Difference between revisions of "CSharp:Esempi LinQ"

From Aino Wiki

Jump to: navigation, search
(Mappa e Links)
 
(No difference)

Latest revision as of 11:02, 23 March 2018

Operazioni su Liste

Eliminazione condizionale di tutti gli elementi

Rimozione di elementi di una lista, nel seguente caso 'ShipData.Instance.lstAIVDO' è una lista del tipo 'List'

ShipData.Instance.lstAIVDO.RemoveAll(x => x.SourceName == UnifiedCollectorDataModel.ShipDataModel.Enums.EnumSourceName.O.ToString());

Trasformazione di una lista in stringa CSV

rowguids = String.Join("|", DVAInvoiceList.Where(i => i.IsSelected).Select(p => p.ROWGUID).ToArray());

Fusione di più DataTable in uno

Si hanno più DataTable legati da chiavi di collegamento, si fondono in un unico finale. Seguono parti salienti ed esemplificative di un caso funzionante ottenibile qui per completezza
//...
dtFull = dsSourceFiles.Tables[arrFileToImport[0]].Clone(); //<-- Di Default E PER IPOTESI, il primo file è quello più importante con info pilota
//...
 
//CREAZIONE MATRICE dei valori da riporre nel nuovo DT omnicomprensivo
object[] emptyObj = new object[dsSourceFiles.Tables[arrFileToImport[1]].Columns.Count];
//...
 
//Prima MATRICE DI VALORI per la prima COPPIA di Files\Datatable da integrare per ogni file successivo al SECONDO
var rowData = from
      row1 in dsSourceFiles.Tables[arrFileToImport[0]].AsEnumerable()
join
      row2 in dsSourceFiles.Tables[arrFileToImport[1]].AsEnumerable()
on
      row1.Field<string>(sourceKeyFieldName0).Trim() equals row2.Field<string>(sourceKeyFieldName1).Trim() into row1X
from rowY in row1X.DefaultIfEmpty()
      select
            row1.ItemArray.Concat(rowY == null ? emptyObj : rowY.ItemArray).ToArray();
//...
 
//Costruisce l'insieme delle colonne di 2 File ovvero DataTable
var dt2Columns = dsSourceFiles.Tables[arrFileToImport[f]].Columns.OfType<DataColumn>()
      .Select(dc => new DataColumn(dc.ColumnName, dc.DataType, dc.Expression, dc.ColumnMapping));
//..
 
rowData = from
     row1 in rowData
join
     row2 in dsSourceFiles.Tables[arrFileToImport[f]].AsEnumerable()
on
     row1[0] equals row2.Field<string>(sourceKeyFieldNameF).Trim() into row1X
from rowY in row1X.DefaultIfEmpty()
select
     row1.Concat(rowY == null ? new object[nrColSecondFile] : rowY.ItemArray).ToArray();
//...
 
//Riempimento DataTable con i Valori dai 2\n DataTable.       rowData    ha TUTTI i valori !!!
int rowInserted = 0;
int j = 0;
try
{
	if (!string.IsNullOrEmpty(strCSVAllPositionToRemove))
	{
		foreach (object[] values in rowData) //Riga definitiva con TUTTI i valori da porre nel DataTable DESTINAZIONE
		{
			j = 0;
			DataRow dr = dtFull.NewRow();
			for (int c = 0; c < values.Length; c++)
			{
				if (strCSVAllPositionToRemove.IndexOf("," + c + ",") < 0)
				{
					//string destinationColumnName = dictColMapping[ dr.Table.Columns[j].ColumnName];
					//dr[j] = TransformFieldValueByDestType(singleValue, destinationColumnName, dictColDestType, true);
					//string singleValue = values[c].ToString();
					dr[j] = values[c];
					j++;
				}
			}
			dtFull.Rows.Add(dr);
			rowInserted++;
		}
	}
//... etc etc ...

Operazioni su Array

Ricerche

Es. Ricerca con operatore insiemistico IN

Da [[1]].Supponendo di avere un array e volerlo filtrare in base ad una stringa CSV, in SQL basterebbe l'operatore IN invece...
Tecnica 1

string[] validNames = names.Split(';');
var query = customers.Where(c => validNames.Contains(c.FirstName));

Tecnica 2 Più performante

HashSet<string> validNames = new HashSet<string>(names.Split(';'));
var query = customers.Where(c => validNames.Contains(c.FirstName));

Tecnica 3 Usando una query expression:

var query = from c in customers
            where validNames.Contains(c.FirstName)
            select c;

Mappa e Links


C# | LinQ Teorici | LinQ


Applicazioni sui Dictionary