J'ai les données suivantes voici ce que je veux revenir: p> mon approche p> Obtenez toute la liste des articles commençant par un P> var items = allItems.Select(x => x.Substring(1));
3 Réponses :
Pour trouver l'élément de valorisation maximum de la colonne ITEMNAME dont le nom d'élément commence par la lettre A Je voudrais essayer ce
Si quelqu'un entre dans linq vers des entités ne reconnaît pas la méthode ....... code>, stockez la recherche [0] .Id code> dans une nouvelle variable comme convertie en SQL, SQL ne le reconnaît pas comme expression valide.
Ceci est une sorte de duplicata de trouver max / min d'une séquence d'objets basée sur une propriété de l'objet. Qui est demandé à l'origine (je pense) Ici
Bâtir de cette réponse, vous pouvez faire quelque chose comme ce que j'ai montré ci-dessous. Évidemment, vous n'avez pas besoin de méthodes locales et de la fonction unique pour que l'index suppose que le format ITEMNAME est stable et toujours 4 caractères. P>
MyItem[] items = new MyItem[]
{
new MyItem() { Id = 1, ItemName = "A100", ItemBy = "User1", ItemCreatedOn = DateTime.Parse("2016-10-04") },
new MyItem() { Id = 1, ItemName = "A200", ItemBy = "User1", ItemCreatedOn = DateTime.Parse("2016-10-04") },
new MyItem() { Id = 1, ItemName = "A300", ItemBy = "User1", ItemCreatedOn = DateTime.Parse("2016-10-04") },
new MyItem() { Id = 1, ItemName = "A400", ItemBy = "User1", ItemCreatedOn = DateTime.Parse("2016-10-04") },
new MyItem() { Id = 1, ItemName = "A500", ItemBy = "User1", ItemCreatedOn = DateTime.Parse("2016-10-04") },
new MyItem() { Id = 1, ItemName = "A600", ItemBy = "User1", ItemCreatedOn = DateTime.Parse("2016-10-04") },
new MyItem() { Id = 1, ItemName = "D100", ItemBy = "User1", ItemCreatedOn = DateTime.Parse("2016-10-04") },
new MyItem() { Id = 1, ItemName = "D900", ItemBy = "User1", ItemCreatedOn = DateTime.Parse("2016-10-04") },
new MyItem() { Id = 1, ItemName = "D200", ItemBy = "User1", ItemCreatedOn = DateTime.Parse("2016-10-04") },
new MyItem() { Id = 1, ItemName = "D300", ItemBy = "User1", ItemCreatedOn = DateTime.Parse("2016-10-04") },
};
Func<string,char> getKey = (name) => name[0];
Func<char, int> toInt = (ch) => ch - '0';
Func<string, int> getValue = (name) => (toInt(name[1]) * 100) + (toInt(name[2]) * 10) + toInt(name[3]);
var maxA = items.Where(i => 'A' == getKey(i.ItemName)).Aggregate((m, x) => getValue(x.ItemName) > getValue(m.ItemName) ? x : m);
Console.WriteLine(maxA.ItemName);
var items = new List<Item>
{
new Item{ItemId = 1, ItemName = "A300", ItemBy = "User1", ItemCreatedOn = DateTime.Parse("2016-10-04")},
new Item{ItemId = 2, ItemName = "A200", ItemBy = "User1", ItemCreatedOn = DateTime.Parse("2016-10-04")},
new Item{ItemId = 3, ItemName = "A300", ItemBy = "User1", ItemCreatedOn = DateTime.Parse("2016-10-04")},
new Item{ItemId = 4, ItemName = "A400", ItemBy = "User1", ItemCreatedOn = DateTime.Parse("2016-10-04")},
new Item{ItemId = 5, ItemName = "A600", ItemBy = "User1", ItemCreatedOn = DateTime.Parse("2016-10-04")},
new Item{ItemId = 6, ItemName = "D100", ItemBy = "User1", ItemCreatedOn = DateTime.Parse("2016-10-04")},
new Item{ItemId = 7, ItemName = "D900", ItemBy = "User1", ItemCreatedOn = DateTime.Parse("2016-10-04")},
new Item{ItemId = 8, ItemName = "D200", ItemBy = "User1", ItemCreatedOn = DateTime.Parse("2016-10-04")},
new Item{ItemId = 9, ItemName = "D300", ItemBy = "User1", ItemCreatedOn = DateTime.Parse("2016-10-04")}
};
// Group item by the number in ItemName.
// In order to hold and remember max number for each letter,
// we use anonymous object for element selector:
// further it allows us to carry the Item object itself and the number in ItemName.
var groups = items.GroupBy(
item => Regex.Split(item.ItemName, "[0-9]+")[0],
item => new { item, num = int.Parse(Regex.Match(item.ItemName, "[0-9]+").Value) });
foreach (var group in groups)
{
// Define the max number
var max = group.Max(x => x.num);
// Knowing max number, we can now get the Item (packed in anonymous object).
// You can retrieve it, if you will (var item = max_item.item;).
var max_item = group.First(x => x.num == max);
WriteLine($"Item with ItemName '{max_item.item.ItemName}' has max count: {max_item.num}");
}
// Output:
// Item with ItemName 'A600' has max count: 600
// Item with ItemName 'D900' has max count: 900
Qu'est-ce que signifie "utiliser max () sur l'articleName pour obtenir le disque dont j'ai besoin"? ItemName contient du texte
Utilisez la fonction max pour obtenir le nombre le plus élevé de la liste.
Et où est-ce que
bc code> inabc600 code> vient? Il n'y a pas de tel caractères dans votre exemple.Pas clair ce dont vous avez besoin ...
@Johnyl, désolé c'était une faute de frappe. Corrigé cela.
Le nom d'article est-il un format cohérent? Toujours 1 lettre et 3 chiffres?
Si vous vous trouvez accéder à ces données comme celui-ci plus que d'exceptionnellement, arrêtez de vous battre et de diviser en deux champs, ou du moins pousser cette logique dans
élément code>.