C# LINQ Select Many

4
我正在将案例与控件匹配,基本上是在案例列表中的记录需要在字符串中指定的匹配数。

到目前为止,我有两个列表,其中的where子句是正确的,但是我不确定如何使用来获取与一个案例匹配的3个控件。我决定使用<.Take()>函数,但它似乎并没有起作用。当我在变量查询上循环时,我没有得到具有3个不同控件的相同案例。

以下是代码:

List<CaseSelection> CurrentCaseList = new List<CaseSelection>();
foreach (CaseSelection CurrentCase in m_casesarraylist)
CurrentCaseList.Add(CurrentCase);

List<ControlSelection> CurrentControlList = new List<ControlSelection>();
foreach (ControlSelection CurrentControlRec in ControlList)
CurrentControlList.Add(CurrentControlRec);


var query = CurrentCaseList.SelectMany(
c => CurrentControlList.Where(o => o.pracid == c.pracid && o.sex == c.sex &&
CaseSelectionList.AgeIsInRange(c.yob, o.yob, m_years)),
(c, o) =>
new { o, c }).Take(m_ctrlno);

看起来你需要使用 GroupBy 而不是 SelectMany。你能提供一些输入和输出的样例吗? - MarcinJuraszek
1个回答

2

在你的代码中,你定义了2个列表CurrentCaseList, CurrentControlList,但没有定义CaseSelectionList

要获取与一个案例相匹配的3个控件,请参见下面的代码:

使用SelectMany方法选择所有订单,其中TotalDue小于500.00。

以下是代码:

decimal totalDue = 500.00M;
using (AdventureWorksEntities context = new AdventureWorksEntities())
{
    ObjectSet<Contact> contacts = context.Contacts;
    ObjectSet<SalesOrderHeader> orders = context.SalesOrderHeaders;

    var query =
    contacts.SelectMany(
        contact => orders.Where(order =>
            (contact.ContactID == order.Contact.ContactID)
                && order.TotalDue < totalDue)
            .Select(order => new
            {
                ContactID = contact.ContactID,
                LastName = contact.LastName,
                FirstName = contact.FirstName,
                OrderID = order.SalesOrderID,
                Total = order.TotalDue
            }));

    foreach (var smallOrder in query)
    {
        Console.WriteLine("Contact ID: {0} Name: {1}, {2} Order ID: {3} Total Due: ${4} ",
            smallOrder.ContactID, smallOrder.LastName, smallOrder.FirstName,
            smallOrder.OrderID, smallOrder.Total);
    }
}

这是终极解决方案@Santhosh。感谢和赞扬。 - user1512559

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接