0

LINQ2SQLクエリの結果をラベルまたはテキストボックスに追加したいと思います。データレイヤーとしてクラス「CustomerClass」を使用します。ここに、LINQクエリを使用するメソッドがあります。この結果は、コードビハインドファイルに返され、ラベルまたはテキストボックスに追加される必要があります。

クラスのメソッド:

public static object SelectCustomerByUser(string user)
{
    var query = (from p in dc.Customers
                 where p.No_ == user
                 select p).Single();
    return query;
}

ファイルの背後にあるコード:

protected void Page_Load(object sender, EventArgs e)
{
    string user = Membership.GetUser().UserName.ToString().ToUpper();
    var queryresult = CustomerClass.SelectCustomerByUser(user);
    lblStreet.Text = ?????????

}

LINQクエリディレクトリをコードビハインドファイルに設定すると、lblStreet.Textを次のように直接割り当てることができます。lblStreet.Text = queryresult.Streetただし、LINQクエリをコードビハインドファイルとは別に保持したいと思います。

4

5 に答える 5

0

次のようなオブジェクトではなく、関数がCustomerを返すようにします。

public static Customer SelectCustomerByUser(string user)

その顧客クラスとその機能は、SelectCustomerByUserそれが顧客を返すことを意味すると呼ばれます。これにより、通りにある顧客のメンバーにアクセスできるようになります。

また、この特定のケースでは、SingleOrDefaultの使用を検討できます。

于 2012-08-06T07:57:15.283 に答える
0

このメソッドはCustomerタイプのボックス化されたオブジェクトをSelectCustomerByUser返すため、それを(型キャストして)ユーザーインターフェイスにプロパティ/フィールドの値を割り当てる必要があります。unbox

何かのようなもの:

var queryresult = CustomerClass.SelectCustomerByUser(user) as Customer;
if(queryresult!=null)
  lblStreet.Text= queryresult.Street;  

の戻り値を変更し、メソッドの代わりにSelectCustomerByUser使用する方がよいでしょう。FirstOrDefaultSingle

public static Customer SelectCustomerByUser(string user)
{
    var query = (from p in dc.Customers
                 where p.No_ == user
                 select p).Single();
    return query;
}
于 2012-08-06T07:51:23.643 に答える
0

したがって、linqはタイプがdc.Customersからオブジェクトを返すようですCustomerClassstring GetCustomerStreet(){...}ラベルをポーリングするために、関数(のようなもの)を作成できます。

lblStreet.Text = ((CustomerClass)queryresult).GetCustomerStreet();
于 2012-08-06T07:52:55.150 に答える
0
public static CustomerClass SelectCustomerByUser(string user)
{
    var query = (from p in dc.Customers
                 where p.No_ == user
                 select p);
    if(query.Any())
    {
        var result=query.FirstOrDefault();
        return new CustomerClass
        {
            Id = result.Id,
            Name = result.Name,
            Age = result.Age
        }
    }
    return null;
}

背後にあるコード

protected void Page_Load(object sender, EventArgs e)
{
    string user = Membership.GetUser().UserName.ToString().ToUpper();
    var queryresult = CustomerClass.SelectCustomerByUser(user);
    lblStreet.Text = queryresult!=null?queryresult.Street:"";

}

また

public static CustomerClass SelectCustomerByUser(string user)
{
    var query = (from p in dc.Customers
                 where p.No_ == user
                 select p);
    if(query.Any())
    {
        return query.FirstOrDefault();      
    }
    return null;
}

コードビハインド

protected void Page_Load(object sender, EventArgs e)
{
    string user = Membership.GetUser().UserName.ToString().ToUpper();
    var queryresult = CustomerClass.SelectCustomerByUser(user);
    lblStreet.Text = queryresult!=null?queryresult.Street:"";
}
于 2012-08-06T07:54:03.323 に答える
0

仮定

var queryresult = CustomerClass.SelectCustomerByUser(user);

Customerのインスタンスを返します。それをそのようにキャストしてから、プロパティを文字列に連結するか、StringBuilderを使用できます。

Customer c = (Customer)queryresult);
textbox.Text = String.Format("{0} email = {1}",customer.name , customer.email);

ところで、私がするクエリで

select p).SingleOrDefault();     

次に、キャストを実行する前に、結果のnullをテストします

于 2012-08-06T08:01:06.650 に答える