0

いくつかのレコードをプルダウンするlinqクエリがあります。1レコード、2レコード、または30レコードの場合があります。レコードが1つしかない場合、またはレコードが2つしかない場合に、レコードを入れるテキストボックスが2つあります。それを超えると、ドロップダウンリストに配置されます。これは私がこれまでに持っているものです。

var getContacts = (from r in gServiceContext.CreateQuery("account")
join c in gServiceContext.CreateQuery("contact") on ((EntityReference) r["accountid"]).Id
equals c["accountid"]
where r["accountid"].Equals(ddlCustomer.SelectedValue)
select new
{
    FirstName = !c.Contains("firstname") ? string.Empty : c["firstname"],
    LastName = !c.Contains("lastname") ? string.Empty : c["lastname"],
});

foreach (var contact in getContacts)
{
    if (getContacts.ToList().Count() == 1)
    {
        txtContact1Name.Text = contact.FirstName + " " + contact.LastName;
    }
    else if (getContacts.ToList().Count() == 2)
    {
        txtContact2Name.Text = contact.FirstName + " " + contact.LastName;
    }
    else if (getContacts.ToList().Count() > 2)
    {
        ddlMultipleContacts.DataSource = getContacts;
        ddlMultipleContacts.DataTextField = "LastName";
        ddlMultipleContacts.DataValueField = "LastName";
        ddlMultipleContacts.DataBind();
    }
}

ただし、レコードが2つある場合は、テキストボックス1とテキストボックス2に同じレコードが配置されます。私は何か間違ったことをしていますか?

ありがとう!

4

2 に答える 2

1

ただし、レコードが2つある場合は、テキストボックス1とテキストボックス2に同じレコードが配置されます。私は何か間違ったことをしていますか?

はい。あなたのコードを見てください:

if (getContacts.ToList().Count() == 2)

あなたは各反復でそれを呼んでいます-あなたはすでに使用した連絡先の数のカウントを使用していません。私はあなたが欲しいと思う:

// Let's only materialize the results *once* instead of once per iteration...
var contacts = getContacts().ToList();
switch (contacts.Count)
{
    case 0: // What do you want to do here?
        break;
    case 1:
        txtContact1Name.Text = FormatName(contacts[0]);
        break;
    case 2:
        txtContact1Name.Text = FormatName(contacts[0]);
        txtContact2Name.Text = FormatName(contacts[1]);
        break;
    default:
        ddlMultipleContacts.DataSource = contacts;
        ddlMultipleContacts.DataTextField = "LastName";
        ddlMultipleContacts.DataValueField = "LastName";
        ddlMultipleContacts.DataBind();
        break;
}
于 2012-05-30T18:43:54.737 に答える
0
var getContacts = (from r in gServiceContext.CreateQuery("account")
                           join c in gServiceContext.CreateQuery("contact") on ((EntityReference) r["accountid"]).Id
                               equals c["accountid"]
                           where r["accountid"].Equals(ddlCustomer.SelectedValue)
                           select new
                                      {
                                          FirstName = !c.Contains("firstname") ? string.Empty : c["firstname"],
                                          LastName = !c.Contains("lastname") ? string.Empty : c["lastname"],
                                      }).ToList();


        if (getContacts.Count > 2)
        {
            ddlMultipleContacts.DataSource = getContacts;
            ddlMultipleContacts.DataTextField = "LastName";
            ddlMultipleContacts.DataValueField = "LastName";
            ddlMultipleContacts.DataBind();
        }
        else if (getContacts.Count == 1)
        {
            txtContact1Name.Text = contact.FirstName + " " + contact.LastName;
        }
        else if (getContacts.Count == 2)
        {
            txtContact1Name.Text = contact[0].FirstName + " " + contact[0].LastName;
            txtContact2Name.Text = contact[1].FirstName + " " + contact[1].LastName;
        }
于 2012-05-30T18:50:58.327 に答える