1

現在join、2 つのテーブルで実行していますが、結果は複数の行になる可能性があります。

戻り値の型はIList<string>現在ですが、エラーが発生しています

エラー:

Cannot implicitly convert type System.Collections.Generic.List<AnonymousType#1> to System.Collections.Generic.IList<string>

これが私の表現です

public IList<string> GetPendingSubGroups()
{
    using (var db = new DataClasses1DataContext())
    {
        var pendingSubGroup =
            db.sys_Log_Account_SubGroups.Where(subGroup => subGroup.cAuthorizedStatus.Equals("Pending")).Join(
                db.sys_Account_Primary_Groups, subGroup => subGroup.nGroupCode, group => group.nGroupCode,
                (subGroup, group) => new
                                         {
                                             cSubGroupName = subGroup.cSubGroupName,
                                             cAddedBy = subGroup.cAddedBy,
                                             dAddedOn = subGroup.dAddedOn
                                         }).ToList();
        return pendingSubGroup;
    }
}

誰でもこれで私を助けることができますか?

4

6 に答える 6

4

結果を表すクラスを作成する

public class SubGroup
{
    public string Name {get; set;}
    public string AddedBy {get; set;}        
    public DateTime AddedOn {get; set;}
}

そして、そのクラスのリストを返します

public IList<SubGroup> GetPendingSubGroups()
    {
        using(var db=new DataClasses1DataContext())
        {
            var pendingSubGroup = db.sys_Log_Account_SubGroups.Where(subGroup => subGroup.cAuthorizedStatus.Equals("Pending")).Join(db.sys_Account_Primary_Groups, subGroup => subGroup.nGroupCode, group => group.nGroupCode,(subGroup, group) => new SubGroup
            {
                Name = subGroup.cSubGroupName,
                AddedBy = subGroup.cAddedBy,
                AddedOn = subGroup.dAddedOn 
            }).ToList();  
            return pendingSubGroup; 
        }
    }

この変更がlinqに埋もれていることに注意してください

(subGroup, group) => new *SubGroup*
            {
                Name = subGroup.cSubGroupName,
                AddedBy = subGroup.cAddedBy,
                AddedOn = subGroup.dAddedOn 
            }).ToList();
于 2012-07-30T10:51:11.990 に答える
3

ここで射影法を使用して匿名型を作成しています。Select

new
{
    cSubGroupName = subGroup.cSubGroupName,
    cAddedBy = subGroup.cAddedBy,
    dAddedOn = subGroup.dAddedOn 
}

型は、コンパイラによって (読み取り専用プロパティを持つクラスとして) 作成されます。このインスタンスのプロパティ名は、、、cSubGroupNameおよびcAddedByですdAddedOn

を返す必要がある場合string、型全体ではなく、これらのプロパティの 1 つを返す必要があるのではないでしょうか?

匿名型と文字列の間の変換を実装することはできないため、最初に型を作成するのではなく、単に文字列プロパティを選択する必要があります。

だけでなく型を返す必要がある場合はstring、このプロパティを使用してカスタム クラスを作成し、匿名型を作成する代わりに、NinjaNye の answer のようにクラスのインスタンスを作成します。

于 2012-07-30T10:50:35.413 に答える
2

エラーメッセージはほとんどすべてを物語っています.匿名型のリストを返しています:

(subGroup, group) => new
{
    cSubGroupName = subGroup.cSubGroupName,
    cAddedBy = subGroup.cAddedBy,
    dAddedOn = subGroup.dAddedOn 
}

SubGroupName だけが必要な場合:

(subGroup, group) => subGroup.cSubGroupName
于 2012-07-30T10:50:56.843 に答える
2

戻り値の型は匿名型です。これらのプロパティを使用して新しいクラスを作成し、次のように使用する必要があります。

public IList<SomeClass> GetPendingSubGroups()
    {
        using(var db=new DataClasses1DataContext())
        {
            var pendingSubGroup = db.sys_Log_Account_SubGroups
            .Where(subGroup => subGroup.cAuthorizedStatus.Equals("Pending"))
            .Join(db.sys_Account_Primary_Groups, subGroup => subGroup.nGroupCode, group => group.nGroupCode,(subGroup, group) => new SomeClass(subGroup.cSubGroupName, subGroup.cAddedBy, subGroup.dAddedOn)).ToList();  

            return pendingSubGroup; 
        }
    }

しかし、文字列を返したいだけのようですか?その場合、その 1 つのフィールドだけを射影できます。

return pendingSubGroup.Select(p => p.cSubGroupName).ToList();
于 2012-07-30T10:51:05.530 に答える
1

すでに回答したように、次の3つのプロパティで構成される匿名タイプを作成します。

cSubGroupName 
cAddedBy 
dAddedOn 

SubGroupNameが取得したいものである場合は、quを修正できます。

public IList<string> GetPendingSubGroups()
        {
            using(var db=new DataClasses1DataContext())
            {
                var pendingSubGroup = db.sys_Log_Account_SubGroups.Where(subGroup => subGroup.cAuthorizedStatus.Equals("Pending")).Join(db.sys_Account_Primary_Groups, subGroup => subGroup.nGroupCode, group => group.nGroupCode,(subGroup, group) => subGroup.cSubGroupName).ToList();  
                return pendingSubGroup; 
            }
        }
于 2012-07-30T10:59:10.023 に答える