0
votes

Renvoyez la liste d'origine à l'aide de la sous-chaîne à Linq

J'ai les données suivantes xxx pré>

voici ce que je veux revenir: p> xxx pré>

mon approche p>

Obtenez toute la liste des articles commençant par un P>

var items = allItems.Select(x => x.Substring(1));


7 commentaires

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 in abc600 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 .


3 Réponses :


1
votes

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 xxx


1 commentaires

Si quelqu'un entre dans linq vers des entités ne reconnaît pas la méthode ....... , stockez la recherche [0] .Id dans une nouvelle variable comme convertie en SQL, SQL ne le reconnaît pas comme expression valide.



0
votes

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);


0 commentaires

0
votes
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

0 commentaires