bmw318mt Ответов: 1

Запрос списка для нескольких элементов


У меня есть следующее:
public class DeviceListItem
{
    public DeviceListItem();
    public string AssignedLot { get; set; }
    public string ID { get; set; }
}


Список может содержать
1. Только один элемент, такой как id-001 и много-АА
2. Несколько товаров с разными ID, но общего много, такие как id-001 с много-АА и ИД-002 с-АА
3. Несколько товаров с разными ID и разные лоты, такие как id-001 с много-АА и ИД-002 с-ББ

У меня также есть следующая функция, которая возвращает строку
private string generateErrorMessage(List<DeviceListItem> mixedDeviceList)
{
 string error = string.Empty;
 // If only 1 device - "Device [<ID>] does not belong to this lot.  It belongs to lot [<Lot>]."
 if (mixedDeviceList.Count == 1)
 error = "Device" + mixedDeviceList[0].ID + " does not belong to this lot. It belongs to lot " + mixedDeviceList[0].AssignedLot;

 // Multiple, same Lot - "There are <n> devices from lot [<Lot>] mixed with the current lot."
 // Multiple, multiple - "There are <n> devices from multiple lots mixed with the current lot."
return error;
}


Мне нужно запросить список и построить соответствующую строку, которая будет возвращена для отмеченного выше кода.

Есть какие-нибудь решения ?

Что я уже пробовал:

Пытался что-то сделать с помощью Linq, но безуспешно

1 Ответов

Рейтинг:
6

Richard Deeming

Легко сделать с LINQ:

if (mixedDeviceList.Count == 1)
{
    return string.Format("Device {0}  does not belong to this lot. It belongs to lot {1}.", mixedDeviceList[0].ID, mixedDeviceList[0].AssignedLot);
}

string firstLot = mixedDeviceList[0].AssignedLot;
bool multipleLots = mixedDeviceList.Skip(1).Any(d => d.AssignedLot != firstLot);

if (multipleLots)
{
    return string.Format("There are {0} devices from multiple lots mixed with the current lot.", mixedDeviceList.Count);
}

return string.Format("There are {0} devices from lot [{1}] mixed with the current lot.", mixedDeviceList.Count, firstLot);

Или, если вы предпочитаете избегать LINQ:
if (mixedDeviceList.Count == 1)
{
    return string.Format("Device {0}  does not belong to this lot. It belongs to lot {1}.", mixedDeviceList[0].ID, mixedDeviceList[0].AssignedLot);
}

string firstLot = mixedDeviceList[0].AssignedLot;

bool multipleLots = false;
for (int index = 1; index < mixedDeviceList.Count; index++)
{
    if (mixedDeviceList[index].AssignedLot != firstLot)
    {
        multipleLots = true;
        break;
    }
}

if (multipleLots)
{
    return string.Format("There are {0} devices from multiple lots mixed with the current lot.", mixedDeviceList.Count);
}

return string.Format("There are {0} devices from lot [{1}] mixed with the current lot.", mixedDeviceList.Count, firstLot);


Maciej Los

Отлично, А5!